commit da75a84e02806432c5e47b4b6fb4b2c09dbe6e3a Author: PopSlime Date: Fri Feb 14 16:06:00 2025 +0800 feat: Initial commit diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..1ff0c42 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,63 @@ +############################################################################### +# Set default behavior to automatically normalize line endings. +############################################################################### +* text=auto + +############################################################################### +# Set default behavior for command prompt diff. +# +# This is need for earlier builds of msysgit that does not have it on by +# default for csharp files. +# Note: This is only used by command line +############################################################################### +#*.cs diff=csharp + +############################################################################### +# Set the merge driver for project and solution files +# +# Merging from the command prompt will add diff markers to the files if there +# are conflicts (Merging from VS is not affected by the settings below, in VS +# the diff markers are never inserted). Diff markers may cause the following +# file extensions to fail to load in VS. An alternative would be to treat +# these files as binary and thus will always conflict and require user +# intervention with every merge. To do so, just uncomment the entries below +############################################################################### +#*.sln merge=binary +#*.csproj merge=binary +#*.vbproj merge=binary +#*.vcxproj merge=binary +#*.vcproj merge=binary +#*.dbproj merge=binary +#*.fsproj merge=binary +#*.lsproj merge=binary +#*.wixproj merge=binary +#*.modelproj merge=binary +#*.sqlproj merge=binary +#*.wwaproj merge=binary + +############################################################################### +# behavior for image files +# +# image files are treated as binary by default. +############################################################################### +#*.jpg binary +#*.png binary +#*.gif binary + +############################################################################### +# diff behavior for common document formats +# +# Convert binary document formats to text before diffing them. This feature +# is only available from the command line. Turn it on by uncommenting the +# entries below. +############################################################################### +#*.doc diff=astextplain +#*.DOC diff=astextplain +#*.docx diff=astextplain +#*.DOCX diff=astextplain +#*.dot diff=astextplain +#*.DOT diff=astextplain +#*.pdf diff=astextplain +#*.PDF diff=astextplain +#*.rtf diff=astextplain +#*.RTF diff=astextplain diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..97a961d --- /dev/null +++ b/.gitignore @@ -0,0 +1,63 @@ +# This .gitignore file should be placed at the root of your Unity project directory +# +# Get latest from https://github.com/github/gitignore/blob/master/Unity.gitignore +# +/[Ll]ibrary/ +/[Tt]emp/ +/[Oo]bj/ +/[Bb]uild/ +/[Bb]uilds/ +/[Ll]ogs/ +/[Mm]emoryCaptures/ + +# Asset meta data should only be ignored when the corresponding asset is also ignored +!/[Aa]ssets/**/*.meta + +# Uncomment this line if you wish to ignore the asset store tools plugin +# /[Aa]ssets/AssetStoreTools* + +# Autogenerated Jetbrains Rider plugin +[Aa]ssets/Plugins/Editor/JetBrains* + +# Visual Studio cache directory +.vs/ + +# Gradle cache directory +.gradle/ + +# Autogenerated VS/MD/Consulo solution and project files +ExportedObj/ +.consulo/ +*.csproj +*.unityproj +*.sln +*.suo +*.tmp +*.user +*.userprefs +*.pidb +*.booproj +*.svd +*.pdb +*.mdb +*.opendb +*.VC.db + +# Unity3D generated meta files +*.pidb.meta +*.pdb.meta +*.mdb.meta + +# Unity3D generated file on crash reports +sysinfo.txt + +# Builds +*.apk +*.unitypackage + +# Crashlytics generated file +crashlytics-build.properties + +# +/Local +/UserSettings diff --git a/.vsconfig b/.vsconfig new file mode 100644 index 0000000..f019fd0 --- /dev/null +++ b/.vsconfig @@ -0,0 +1,6 @@ +{ + "version": "1.0", + "components": [ + "Microsoft.VisualStudio.Workload.ManagedGame" + ] +} diff --git a/Assets/Cryville.Common.meta b/Assets/Cryville.Common.meta new file mode 100644 index 0000000..1b25d36 --- /dev/null +++ b/Assets/Cryville.Common.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9a556074c98d68643a16692f7f3af693 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Cryville.Common/Cryville.Common.asmdef b/Assets/Cryville.Common/Cryville.Common.asmdef new file mode 100644 index 0000000..5ac34ca --- /dev/null +++ b/Assets/Cryville.Common/Cryville.Common.asmdef @@ -0,0 +1,16 @@ +{ + "name": "Cryville.Common", + "rootNamespace": "", + "references": [ + "GUID:da293eebbcb9a4947a212534c52d1a32" + ], + "includePlatforms": [], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": false, + "defineConstraints": [], + "versionDefines": [], + "noEngineReferences": false +} \ No newline at end of file diff --git a/Assets/Cryville.Common/Cryville.Common.asmdef.meta b/Assets/Cryville.Common/Cryville.Common.asmdef.meta new file mode 100644 index 0000000..354bb58 --- /dev/null +++ b/Assets/Cryville.Common/Cryville.Common.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: b92f9c7ac10b1c04e86fc48210f62ab1 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Cryville.Common/Font.meta b/Assets/Cryville.Common/Font.meta new file mode 100644 index 0000000..cdd30c2 --- /dev/null +++ b/Assets/Cryville.Common/Font.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6e89e0a49233f9e48a97ca7751345a54 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Cryville.Common/Font/FontFile.cs b/Assets/Cryville.Common/Font/FontFile.cs new file mode 100644 index 0000000..0e2ac51 --- /dev/null +++ b/Assets/Cryville.Common/Font/FontFile.cs @@ -0,0 +1,113 @@ +using Cryville.Common.IO; +using System; +using System.Collections; +using System.Collections.Generic; +using System.IO; + +namespace Cryville.Common.Font { + public abstract class FontFile : IEnumerable { + public abstract int Count { get; } + public abstract Typeface this[int index] { get; } + protected FileInfo File { get; private set; } + protected BinaryReader Reader { get; private set; } + public FontFile(FileInfo file) { + File = file; + Reader = new BinaryReaderBE(new FileStream(file.FullName, FileMode.Open, FileAccess.Read)); + } + public void Close() { Reader.Close(); } + + public static FontFile Create(FileInfo file) { + switch (file.Extension) { + case ".ttf": case ".otf": return new FontFileTTF(file); + case ".ttc": case ".otc": return new FontFileTTC(file); + default: return null; + } + } + + public Enumerator GetEnumerator() { + return new Enumerator(this); + } + IEnumerator IEnumerable.GetEnumerator() { + return GetEnumerator(); + } + IEnumerator IEnumerable.GetEnumerator() { + return GetEnumerator(); + } + + public struct Enumerator : IEnumerator { + readonly FontFile _self; + int _index; + internal Enumerator(FontFile self) { + _self = self; + _index = -1; + } + + public Typeface Current { + get { + if (_index < 0) + throw new InvalidOperationException(_index == -1 ? "Enum not started" : "Enum ended"); + return _self[_index]; + } + } + + object IEnumerator.Current { get { return Current; } } + + public void Dispose() { + _index = -2; + } + + public bool MoveNext() { + if (_index == -2) return false; + _index++; + if (_index >= _self.Count) { + _index = -2; + return false; + } + return true; + } + + public void Reset() { + _index = -1; + } + } + } + public class FontFileTTF : FontFile { + public override int Count { get { return 1; } } + public override Typeface this[int index] { + get { + if (index != 0) throw new ArgumentOutOfRangeException("index"); + try { + return new TypefaceTTF(Reader, File, index); + } + catch (Exception) { + throw new InvalidDataException("Invalid font"); + } + } + } + public FontFileTTF(FileInfo file) : base(file) { } + } + public class FontFileTTC : FontFile { + readonly IReadOnlyList _offsets; + public override int Count { get { return _offsets.Count; } } + public override Typeface this[int index] { + get { + if (index < 0 || index >= Count) throw new ArgumentOutOfRangeException("index"); + Reader.BaseStream.Position = _offsets[index]; + try { + return new TypefaceTTF(Reader, File, index); + } + catch (Exception) { + throw new InvalidDataException("Invalid font"); + } + } + } + public FontFileTTC(FileInfo file) : base(file) { + try { + _offsets = new TTCHeader(Reader, 0).GetItems(); + } + catch (Exception) { + throw new InvalidDataException("Invalid font"); + } + } + } +} diff --git a/Assets/Cryville.Common/Font/FontFile.cs.meta b/Assets/Cryville.Common/Font/FontFile.cs.meta new file mode 100644 index 0000000..8b86d47 --- /dev/null +++ b/Assets/Cryville.Common/Font/FontFile.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c1804280aa04fb744a331a1d2dc0066b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Cryville.Common/Font/FontManager.cs b/Assets/Cryville.Common/Font/FontManager.cs new file mode 100644 index 0000000..9e7d6e0 --- /dev/null +++ b/Assets/Cryville.Common/Font/FontManager.cs @@ -0,0 +1,64 @@ +using System.Collections.Generic; +using System.IO; +using System.Linq; + +namespace Cryville.Common.Font { + public abstract class FontManager { + public IReadOnlyDictionary MapFullNameToTypeface { get; private set; } + public IReadOnlyDictionary> MapNameToTypefaces { get; private set; } + public FontManager() { + var map1 = new Dictionary(); + var map2 = new Dictionary>(); + foreach (var f in EnumerateAllTypefaces()) { + if (!map1.ContainsKey(f.FullName)) { + map1.Add(f.FullName, f); + } + else { + continue; + } + List set2; + if (!map2.TryGetValue(f.FamilyName, out set2)) { + map2.Add(f.FamilyName, set2 = new List()); + } + set2.Add(f); + } + MapFullNameToTypeface = map1; + MapNameToTypefaces = map2.ToDictionary(i => i.Key, i => (IReadOnlyCollection)i.Value); + } + protected abstract IEnumerable EnumerateAllTypefaces(); + protected static IEnumerable ScanDirectoryForTypefaces(string dir) { + foreach (var f in new DirectoryInfo(dir).EnumerateFiles()) { + FontFile file; + try { + file = FontFile.Create(f); + } + catch (InvalidDataException) { + continue; + } + if (file == null) continue; + var enumerator = file.GetEnumerator(); + while (enumerator.MoveNext()) { + Typeface ret; + try { + ret = enumerator.Current; + } + catch (InvalidDataException) { + continue; + } + yield return ret; + } + file.Close(); + } + } + } + public class FontManagerAndroid : FontManager { + protected override IEnumerable EnumerateAllTypefaces() { + return ScanDirectoryForTypefaces("/system/fonts"); + } + } + public class FontManagerWindows : FontManager { + protected override IEnumerable EnumerateAllTypefaces() { + return ScanDirectoryForTypefaces("C:/Windows/Fonts"); + } + } +} diff --git a/Assets/Cryville.Common/Font/FontManager.cs.meta b/Assets/Cryville.Common/Font/FontManager.cs.meta new file mode 100644 index 0000000..29f9e06 --- /dev/null +++ b/Assets/Cryville.Common/Font/FontManager.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9fd2cf4e5a96f5146a8b950c3647e4c9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Cryville.Common/Font/FontMatcher.cs b/Assets/Cryville.Common/Font/FontMatcher.cs new file mode 100644 index 0000000..dd14f91 --- /dev/null +++ b/Assets/Cryville.Common/Font/FontMatcher.cs @@ -0,0 +1,343 @@ +using Cryville.Culture; +using System; +using System.Collections.Generic; +using System.Linq; + +namespace Cryville.Common.Font { + public abstract class FontMatcher { + protected FontManager Manager { get; private set; } + public FontMatcher(FontManager manager) { Manager = manager; } + public abstract IEnumerable MatchLanguage(LanguageId lang, bool distinctFamily = false); + } + public class FallbackListFontMatcher : FontMatcher { + readonly LanguageMatching _matcher; + static readonly string UltimateFallbackScript = "zzzz"; + public Dictionary> MapScriptToTypefaces = new(); + public static Dictionary> GetDefaultWindowsFallbackMap() { + var map = new Dictionary>(StringComparer.OrdinalIgnoreCase); + FillKeysWithScripts(map, () => new List()); + // Reference: https://github.com/chromium/chromium/blob/main/third_party/blink/renderer/platform/fonts/win/font_fallback_win.cc + map[UltimateFallbackScript].Insert(0, "SimSun"); // Custom + map[UltimateFallbackScript].Insert(0, "SimHei"); // Custom + map[UltimateFallbackScript].Insert(0, "Microsoft YaHei"); // Custom + map[UltimateFallbackScript].Insert(0, "Arial"); + map[UltimateFallbackScript].Insert(0, "Times New Roman"); + map[UltimateFallbackScript].Insert(0, "Segoe UI"); // Custom + map["arab"].Insert(0, "Tahoma"); + map["cyrl"].Insert(0, "Times New Roman"); + map["grek"].Insert(0, "Times New Roman"); + map["hebr"].Insert(0, "David"); + map["jpan"].Insert(0, "MS PGothic"); + map["latn"].Insert(0, "Times New Roman"); + map["hans"].Insert(0, "SimSun"); + map["hans"].Insert(0, "SimHei"); // Custom + map["thai"].Insert(0, "Tahoma"); + map["hans"].Insert(0, "PMingLiU"); + // Reference: https://learn.microsoft.com/en-us/globalization/input/font-support + var ver = Environment.OSVersion.Version; + if (ver >= new Version(5, 0)) { // Windows 2000 + map["armn"].Insert(0, "Sylfaen"); + map["deva"].Insert(0, "Mangal"); + map["geor"].Insert(0, "Sylfaen"); + map["taml"].Insert(0, "Latha"); + } + if (ver >= new Version(5, 1)) { // Windows XP + map["gujr"].Insert(0, "Shruti"); + map["guru"].Insert(0, "Raavi"); + map["knda"].Insert(0, "Tunga"); + map["syrc"].Insert(0, "Estrangelo Edessa"); + map["telu"].Insert(0, "Gautami"); + map["thaa"].Insert(0, "MV Boli"); + // SP2 + map["beng"].Insert(0, "Vrinda"); + map["mlym"].Insert(0, "Kartika"); + } + if (ver >= new Version(6, 0)) { // Windows Vista + map["cans"].Insert(0, "Euphemia"); + map["cher"].Insert(0, "Plantagenet"); + map["ethi"].Insert(0, "Nyala"); + map["khmr"].Insert(0, "DaunPenh MoolBoran"); + map["kore"].Insert(0, "Malgun Gothic"); // Reference: https://en.wikipedia.org/wiki/List_of_typefaces_included_with_Microsoft_Windows + map["laoo"].Insert(0, "DokChampa"); + map["mong"].Insert(0, "Mongolian Baiti"); + map["orya"].Insert(0, "Kalinga"); + map["sinh"].Insert(0, "Iskoola Pota"); + map["tibt"].Insert(0, "Microsoft Himalaya"); + map["yiii"].Insert(0, "Microsoft Yi Baiti"); + map["arab"].Insert(0, "Segoe UI"); + map["cyrl"].Insert(0, "Segoe UI"); + map["grek"].Insert(0, "Segoe UI"); + map["latn"].Insert(0, "Segoe UI"); + map["hans"].Add("SimSun-ExtB"); + map["hant"].Add("MingLiU-ExtB"); + map["hant"].Add("MingLiU_HKSCS-ExtB"); + map["arab"].Add("Microsoft Uighur"); + map["zmth"].Insert(0, "Cambria Math"); + // Reference: https://en.wikipedia.org/wiki/List_of_CJK_fonts + map["jpan"].Insert(0, "Meiryo"); + map["hans"].Insert(0, "Microsoft YaHei"); + } + if (ver >= new Version(6, 1)) { // Windows 7 + map["brai"].Insert(0, "Segoe UI Symbol"); + map["dsrt"].Insert(0, "Segoe UI Symbol"); + map["talu"].Insert(0, "Microsoft New Tai Lue"); + map["ogam"].Insert(0, "Segoe UI Symbol"); + map["osma"].Insert(0, "Ebrima"); + map["phag"].Insert(0, "Microsoft PhagsPa"); + map["runr"].Insert(0, "Segoe UI Symbol"); + map["zsym"].Insert(0, "Segoe UI Symbol"); + map["tale"].Insert(0, "Microsoft Tai Le"); + map["tfng"].Insert(0, "Ebrima"); + map["vaii"].Insert(0, "Ebrima"); + } + if (ver >= new Version(6, 2)) { // Windows 8 + map["glag"].Insert(0, "Segoe UI Symbol"); + map["goth"].Insert(0, "Segoe UI Symbol"); + map["hang"].Add("Malgun Gothic"); + map["ital"].Insert(0, "Segoe UI Symbol"); + map["lisu"].Insert(0, "Segoe UI"); + map["mymr"].Insert(0, "Myanmar Text"); + map["nkoo"].Insert(0, "Ebrima"); + map["orkh"].Insert(0, "Segoe UI Symbol"); + map["ethi"].Insert(0, "Ebrima"); + map["cans"].Insert(0, "Gadugi"); + map["hant"].Insert(0, "Microsoft JhengHei UI"); + map["hans"].Insert(0, "Microsoft YaHei UI"); + map["beng"].Insert(0, "Nirmala UI"); + map["deva"].Insert(0, "Nirmala UI"); + map["gujr"].Insert(0, "Nirmala UI"); + map["guru"].Insert(0, "Nirmala UI"); // NOT DOCUMENTED, UNVERIFIED + map["knda"].Insert(0, "Nirmala UI"); // NOT DOCUMENTED, UNVERIFIED + map["mlym"].Insert(0, "Nirmala UI"); + map["orya"].Insert(0, "Nirmala UI"); + map["sinh"].Insert(0, "Nirmala UI"); // NOT DOCUMENTED, UNVERIFIED + map["taml"].Insert(0, "Nirmala UI"); // NOT DOCUMENTED, UNVERIFIED + map["telu"].Insert(0, "Nirmala UI"); + map["armn"].Insert(0, "Segoe UI"); + map["geor"].Insert(0, "Segoe UI"); + map["hebr"].Insert(0, "Segoe UI"); + } + if (ver >= new Version(6, 3)) { // Windows 8.1 + map["bugi"].Insert(0, "Leelawadee UI"); + map["copt"].Insert(0, "Segoe UI Symbol"); + map["java"].Insert(0, "Javanese Text"); + map["merc"].Insert(0, "Segoe UI Symbol"); + map["olck"].Insert(0, "Nirmala UI"); + map["sora"].Insert(0, "Nirmala UI"); + map["khmr"].Insert(0, "Leelawadee UI"); + map["laoo"].Insert(0, "Leelawadee UI"); + map["thai"].Insert(0, "Leelawadee UI"); + map["zsye"].Insert(0, "Segoe UI Emoji"); + } + if (ver >= new Version(10, 0)) { // Windows 10 + map["brah"].Insert(0, "Segoe UI Historic"); + map["cari"].Insert(0, "Segoe UI Historic"); + map["cprt"].Insert(0, "Segoe UI Historic"); + map["egyp"].Insert(0, "Segoe UI Historic"); + map["armi"].Insert(0, "Segoe UI Historic"); + map["phli"].Insert(0, "Segoe UI Historic"); + map["prti"].Insert(0, "Segoe UI Historic"); + map["khar"].Insert(0, "Segoe UI Historic"); + map["lyci"].Insert(0, "Segoe UI Historic"); + map["lydi"].Insert(0, "Segoe UI Historic"); + map["phnx"].Insert(0, "Segoe UI Historic"); + map["xpeo"].Insert(0, "Segoe UI Historic"); + map["sarb"].Insert(0, "Segoe UI Historic"); + map["shaw"].Insert(0, "Segoe UI Historic"); + map["xsux"].Insert(0, "Segoe UI Historic"); + map["ugar"].Insert(0, "Segoe UI Historic"); + // Segoe UI Symbol -> Segoe UI Historic + map["glag"].Insert(0, "Segoe UI Historic"); + map["goth"].Insert(0, "Segoe UI Historic"); + map["merc"].Insert(0, "Segoe UI Historic"); + map["ogam"].Insert(0, "Segoe UI Historic"); + map["ital"].Insert(0, "Segoe UI Historic"); + map["orkh"].Insert(0, "Segoe UI Historic"); + map["runr"].Insert(0, "Segoe UI Historic"); + // + map["jpan"].Insert(0, "Yu Gothic UI"); + map["zsym"].Add("Segoe MDL2 Assets"); + } + return map; + } + public static Dictionary> GetDefaultAndroidFallbackMap() { + var map = new Dictionary>(StringComparer.OrdinalIgnoreCase); + FillKeysWithScripts(map, () => new List()); + map[UltimateFallbackScript].Insert(0, "Noto Sans CJK TC"); // TODO Modify default fallback + map[UltimateFallbackScript].Insert(0, "Noto Sans CJK JP"); + map[UltimateFallbackScript].Insert(0, "Noto Sans CJK SC"); + map[UltimateFallbackScript].Insert(0, "Roboto"); + map["zsye"].Insert(0, "Noto Color Emoji"); + map["zsye"].Add("Noto Color Emoji Flags"); + map["arab"].Insert(0, "Noto Naskh Arabic"); + map["adlm"].Insert(0, "Noto Sans Adlam"); + map["ahom"].Insert(0, "Noto Sans Ahom"); + map["hluw"].Insert(0, "Noto Sans Anatolian Hieroglyphs"); + map["armn"].Insert(0, "Noto Sans Armenian"); + map["avst"].Insert(0, "Noto Sans Avestan"); + map["bali"].Insert(0, "Noto Sans Balinese"); + map["bamu"].Insert(0, "Noto Sans Bamum"); + map["bass"].Insert(0, "Noto Sans Bassa Vah"); + map["batk"].Insert(0, "Noto Sans Batak"); + map["beng"].Insert(0, "Noto Sans Bengali"); + map["bhks"].Insert(0, "Noto Sans Bhaiksuki"); + map["brah"].Insert(0, "Noto Sans Brahmi"); + map["bugi"].Insert(0, "Noto Sans Buginese"); + map["buhd"].Insert(0, "Noto Sans Buhid"); + map["jpan"].Insert(0, "Noto Sans CJK JP"); + map["kore"].Insert(0, "Noto Sans CJK KR"); + map["hans"].Insert(0, "Noto Sans CJK SC"); + map["hant"].Insert(0, "Noto Sans CJK TC"); + map["hant"].Add("Noto Sans CJK HK"); + map["cans"].Insert(0, "Noto Sans Canadian Aboriginal"); + map["cari"].Insert(0, "Noto Sans Carian"); + map["cakm"].Insert(0, "Noto Sans Chakma"); + map["cham"].Insert(0, "Noto Sans Cham"); + map["cher"].Insert(0, "Noto Sans Cherokee"); + map["copt"].Insert(0, "Noto Sans Coptic"); + map["xsux"].Insert(0, "Noto Sans Cuneiform"); + map["cprt"].Insert(0, "Noto Sans Cypriot"); + map["dsrt"].Insert(0, "Noto Sans Deseret"); + map["deva"].Insert(0, "Noto Sans Devanagari"); + map["egyp"].Insert(0, "Noto Sans Egyptian Hieroglyphs"); + map["elba"].Insert(0, "Noto Sans Elbasan"); + map["ethi"].Insert(0, "Noto Sans Ethiopic"); + map["geor"].Insert(0, "Noto Sans Georgian"); + map["glag"].Insert(0, "Noto Sans Glagolitic"); + map["goth"].Insert(0, "Noto Sans Gothic"); + map["gran"].Insert(0, "Noto Sans Grantha"); + map["gujr"].Insert(0, "Noto Sans Gujarati"); + map["gong"].Insert(0, "Noto Sans Gunjala Gondi"); + map["guru"].Insert(0, "Noto Sans Gurmukhi"); + map["rohg"].Insert(0, "Noto Sans Hanifi Rohingya"); + map["hano"].Insert(0, "Noto Sans Hanunoo"); + map["hatr"].Insert(0, "Noto Sans Hatran"); + map["hebr"].Insert(0, "Noto Sans Hebrew"); + map["armi"].Insert(0, "Noto Sans Imperial Aramaic"); + map["phli"].Insert(0, "Noto Sans Inscriptional Pahlavi"); + map["prti"].Insert(0, "Noto Sans Inscriptional Parthian"); + map["java"].Insert(0, "Noto Sans Javanese"); + map["kthi"].Insert(0, "Noto Sans Kaithi"); + map["knda"].Insert(0, "Noto Sans Kannada"); + map["kali"].Insert(0, "Noto Sans KayahLi"); + map["khar"].Insert(0, "Noto Sans Kharoshthi"); + map["khmr"].Insert(0, "Noto Sans Khmer"); + map["khoj"].Insert(0, "Noto Sans Khojki"); + map["laoo"].Insert(0, "Noto Sans Lao"); + map["lepc"].Insert(0, "Noto Sans Lepcha"); + map["limb"].Insert(0, "Noto Sans Limbu"); + map["lina"].Insert(0, "Noto Sans Linear A"); + map["linb"].Insert(0, "Noto Sans Linear B"); + map["lisu"].Insert(0, "Noto Sans Lisu"); + map["lyci"].Insert(0, "Noto Sans Lycian"); + map["lydi"].Insert(0, "Noto Sans Lydian"); + map["mlym"].Insert(0, "Noto Sans Malayalam"); + map["mand"].Insert(0, "Noto Sans Mandiac"); + map["mani"].Insert(0, "Noto Sans Manichaean"); + map["marc"].Insert(0, "Noto Sans Marchen"); + map["gonm"].Insert(0, "Noto Sans Masaram Gondi"); + map["medf"].Insert(0, "Noto Sans Medefaidrin"); + map["mtei"].Insert(0, "Noto Sans Meetei Mayek"); + map["merc"].Insert(0, "Noto Sans Meroitic"); + map["mero"].Insert(0, "Noto Sans Meroitic"); + map["plrd"].Insert(0, "Noto Sans Miao"); + map["modi"].Insert(0, "Noto Sans Modi"); + map["mong"].Insert(0, "Noto Sans Mongolian"); + map["mroo"].Insert(0, "Noto Sans Mro"); + map["mult"].Insert(0, "Noto Sans Multani"); + map["mymr"].Insert(0, "Noto Sans Myanmar"); + map["nkoo"].Insert(0, "Noto Sans Nko"); + map["nbat"].Insert(0, "Noto Sans Nabataean"); + map["talu"].Insert(0, "Noto Sans New Tai Lue"); + map["newa"].Insert(0, "Noto Sans Newa"); + map["ogam"].Insert(0, "Noto Sans Ogham"); + map["olck"].Insert(0, "Noto Sans Ol Chiki"); + map["ital"].Insert(0, "Noto Sans Old Italian"); + map["narb"].Insert(0, "Noto Sans Old North Arabian"); + map["perm"].Insert(0, "Noto Sans Old Permic"); + map["xpeo"].Insert(0, "Noto Sans Old Persian"); + map["sarb"].Insert(0, "Noto Sans Old South Arabian"); + map["orkh"].Insert(0, "Noto Sans Old Turkic"); + map["orya"].Insert(0, "Noto Sans Oriya"); + map["osge"].Insert(0, "Noto Sans Osage"); + map["osma"].Insert(0, "Noto Sans Osmanya"); + map["hmng"].Insert(0, "Noto Sans Pahawh Hmong"); + map["palm"].Insert(0, "Noto Sans Palmyrene"); + map["pauc"].Insert(0, "Noto Sans Pau Cin Hau"); + map["phag"].Insert(0, "Noto Sans Phags Pa"); + map["phnx"].Insert(0, "Noto Sans Phoenician"); + map["rjng"].Insert(0, "Noto Sans Rejang"); + map["runr"].Insert(0, "Noto Sans Runic"); + map["samr"].Insert(0, "Noto Sans Samaritan"); + map["saur"].Insert(0, "Noto Sans Saurashtra"); + map["shrd"].Insert(0, "Noto Sans Sharada"); + map["shaw"].Insert(0, "Noto Sans Shavian"); + map["sinh"].Insert(0, "Noto Sans Sinhala"); + map["sora"].Insert(0, "Noto Sans Sora Sompeng"); + map["soyo"].Insert(0, "Noto Sans Soyombo"); + map["sund"].Insert(0, "Noto Sans Sundanese"); + map["sylo"].Insert(0, "Noto Sans Syloti Nagri"); + map["zsym"].Insert(0, "Noto Sans Symbols"); + map["syrc"].Add("Noto Sans Syriac Eastern"); + map["syrc"].Add("Noto Sans Syriac Western"); + map["syrc"].Add("Noto Sans Syriac Estrangela"); + map["tglg"].Insert(0, "Noto Sans Tagalog"); + map["tagb"].Insert(0, "Noto Sans Tagbanwa"); + map["tale"].Insert(0, "Noto Sans Tai Le"); + map["lana"].Insert(0, "Noto Sans Tai Tham"); + map["tavt"].Insert(0, "Noto Sans Tai Viet"); + map["takr"].Insert(0, "Noto Sans Takri"); + map["taml"].Insert(0, "Noto Sans Tamil"); + map["telu"].Insert(0, "Noto Sans Telugu"); + map["thaa"].Insert(0, "Noto Sans Thaana"); + map["thai"].Insert(0, "Noto Sans Thai"); + map["tfng"].Insert(0, "Noto Sans Tifinagh"); + map["ugar"].Insert(0, "Noto Sans Ugaritic"); + map["vaii"].Insert(0, "Noto Sans Vai"); + map["wcho"].Insert(0, "Noto Sans Wancho"); + map["wara"].Insert(0, "Noto Sans Warang Citi"); + map["yiii"].Insert(0, "Noto Sans Yi"); + return map; + } + static void FillKeysWithScripts(IDictionary map, Func value) { + foreach (var s in IdValidity.Enumerate("script")) map.Add(s, value()); + } + + public FallbackListFontMatcher(LanguageMatching matcher, FontManager manager) : base(manager) { + _matcher = matcher; + } + public override IEnumerable MatchLanguage(LanguageId lang, bool distinctFamily = false) { + var supported = MapScriptToTypefaces.Keys.Select(i => new LanguageId(i)).ToList(); + bool flag = false; + while (_matcher.Match(lang, supported, out var match, out var distance)) { + if (distance > 40) break; + if (match.Script.Equals(UltimateFallbackScript, StringComparison.OrdinalIgnoreCase)) { + flag = true; + } + var candidates = MapScriptToTypefaces[match.Script]; + foreach (var typeface in EnumerateTypefaces(candidates, distinctFamily)) { + yield return typeface; + } + supported.Remove(match); + } + if (flag) yield break; + foreach (var typeface in EnumerateTypefaces(MapScriptToTypefaces[UltimateFallbackScript], distinctFamily)) { + yield return typeface; + } + } + IEnumerable EnumerateTypefaces(List candidates, bool distinctFamily) { + foreach (var candidate in candidates) { + if (Manager.MapFullNameToTypeface.TryGetValue(candidate, out var typeface1)) { + yield return typeface1; + } + if (distinctFamily) continue; + if (Manager.MapNameToTypefaces.TryGetValue(candidate, out var typefaces2)) { + foreach (var typeface in typefaces2) { + if (typeface1 == typeface) continue; + yield return typeface; + } + } + } + } + } +} diff --git a/Assets/Cryville.Common/Font/FontMatcher.cs.meta b/Assets/Cryville.Common/Font/FontMatcher.cs.meta new file mode 100644 index 0000000..b9f35c1 --- /dev/null +++ b/Assets/Cryville.Common/Font/FontMatcher.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 157390bd8c4b14243b9109b88480a1c6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Cryville.Common/Font/FontTable.cs b/Assets/Cryville.Common/Font/FontTable.cs new file mode 100644 index 0000000..af359cc --- /dev/null +++ b/Assets/Cryville.Common/Font/FontTable.cs @@ -0,0 +1,256 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Text; + +#pragma warning disable IDE0049 +namespace Cryville.Common.Font { + public abstract class FontTable { + protected UInt32 Offset { get; private set; } + protected BinaryReader Reader { get; private set; } + + protected FontTable(BinaryReader reader, UInt32 offset) { + Reader = reader; + Offset = offset; + reader.BaseStream.Position = offset; + } + public abstract IReadOnlyList GetItems(); + } + public abstract class FontTable : FontTable { + protected FontTable(BinaryReader reader, UInt32 offset) : base(reader, offset) { } + public abstract U GetSubTable(T item); + } + public sealed class TTCHeader : FontTable { + readonly String ttcTag; + readonly UInt16 majorVersion; + readonly UInt16 minorVersion; + readonly UInt32 numFonts; + readonly List tableDirectoryOffsets = new List(); +#pragma warning disable IDE0052 // Reserved + readonly String dsigTag; + readonly UInt32 dsigLength; + readonly UInt32 dsigOffset; +#pragma warning restore IDE0052 // Reserved + public TTCHeader(BinaryReader reader, UInt32 offset) : base(reader, offset) { + ttcTag = reader.ReadTag(); + if (ttcTag != "ttcf") throw new NotSupportedException(); + majorVersion = reader.ReadUInt16(); + minorVersion = reader.ReadUInt16(); + if (minorVersion != 0) throw new NotSupportedException(); + numFonts = reader.ReadUInt32(); + for (UInt32 i = 0; i < numFonts; i++) tableDirectoryOffsets.Add(reader.ReadUInt32()); + if (majorVersion == 2) { + dsigTag = reader.ReadTag(); + dsigLength = reader.ReadUInt32(); + dsigOffset = reader.ReadUInt32(); + } + } + public override IReadOnlyList GetItems() { + return tableDirectoryOffsets; + } + public override TableDirectory GetSubTable(UInt32 item) { + var i = item; + return new TableDirectory(Reader, i); + } + } + public sealed class TableDirectory : FontTable { + readonly UInt32 sfntVersion; + readonly UInt16 numTables; +#pragma warning disable IDE0052 // Reserved + readonly UInt16 searchRange; + readonly UInt16 entrySelector; + readonly UInt16 rangeShift; +#pragma warning restore IDE0052 // Reserved + readonly List tableRecords = new List(); + public TableDirectory(BinaryReader reader, UInt32 offset) : base(reader, offset) { + sfntVersion = reader.ReadUInt32(); + if (sfntVersion != 0x00010000 && sfntVersion != 0x4F54544F && + sfntVersion != 0x74727565 && sfntVersion != 0x74797031) throw new NotSupportedException(); + numTables = reader.ReadUInt16(); + searchRange = reader.ReadUInt16(); + entrySelector = reader.ReadUInt16(); + rangeShift = reader.ReadUInt16(); + for (int i = 0; i < numTables; i++) + tableRecords.Add(new TableRecord { + tableTag = reader.ReadTag(), + checksum = reader.ReadUInt32(), + offset = reader.ReadUInt32(), + length = reader.ReadUInt32(), + }); + } + public override IReadOnlyList GetItems() { + return tableRecords; + } + public override object GetSubTable(TableRecord item) { + switch (item.tableTag) { + case "name": return new NameTable(Reader, item.offset); + case "meta": return new MetaTable(Reader, item.offset); + default: throw new NotImplementedException(); + } + } + } + public struct TableRecord { + public string tableTag; + public UInt32 checksum; + public UInt32 offset; + public UInt32 length; + } + public sealed class NameTable : FontTable { + readonly UInt16 version; + readonly UInt16 count; + readonly UInt16 storageOffset; + readonly List nameRecord = new List(); + readonly UInt16 langTagCount; + readonly List langTagRecord = new List(); + public NameTable(BinaryReader reader, UInt32 offset) : base(reader, offset) { + version = reader.ReadUInt16(); + count = reader.ReadUInt16(); + storageOffset = reader.ReadUInt16(); + for (UInt16 i = 0; i < count; i++) + nameRecord.Add(new NameRecord( + reader.ReadUInt16(), + reader.ReadUInt16(), + reader.ReadUInt16(), + (NameID)reader.ReadUInt16(), + reader.ReadUInt16(), + reader.ReadUInt16() + )); + if (version == 1) { + langTagCount = reader.ReadUInt16(); + for (UInt16 i = 0; i < langTagCount; i++) + langTagRecord.Add(new LangTagRecord( + reader.ReadUInt16(), + reader.ReadUInt16() + )); + } + foreach (var i in nameRecord) + i.Load(reader, offset + storageOffset); + if (version == 1) { + foreach (var i in langTagRecord) + i.Load(reader, offset + storageOffset); + } + } + public sealed override IReadOnlyList GetItems() { + return nameRecord; + } + } + public class NameRecord { + public UInt16 PlatformID { get; private set; } + public UInt16 EncodingID { get; private set; } + public UInt16 LanguageID { get; private set; } + public NameID NameID { get; private set; } + public UInt16 Length { get; private set; } + public UInt16 StringOffset { get; private set; } + public String Value { get; private set; } + public NameRecord(UInt16 platformID, UInt16 encodingID, UInt16 languageID, NameID nameID, UInt16 length, UInt16 stringOffset) { + PlatformID = platformID; + EncodingID = encodingID; + LanguageID = languageID; + NameID = nameID; + Length = length; + StringOffset = stringOffset; + } + public void Load(BinaryReader reader, UInt32 origin) { + reader.BaseStream.Position = origin + StringOffset; + Encoding encoding; + try { + switch (PlatformID) { + case 0: encoding = Encoding.BigEndianUnicode; break; + case 1: encoding = Encoding.GetEncoding(10000 + EncodingID); break; + case 3: encoding = Encoding.BigEndianUnicode; break; + default: return; + } + } + catch (NotSupportedException) { return; } + catch (ArgumentException) { return; } + Value = encoding.GetString(reader.ReadBytes(Length)); + } + } + public enum NameID : UInt16 { + CopyrightNotice = 0, + FontFamilyName = 1, + FontSubfamilyName = 2, + UniqueFontIdentifier = 3, + FullFontName = 4, + VersionString = 5, + PostScriptName = 6, + Trademark = 7, + ManufacturerName = 8, + Designer = 9, + Description = 10, + URLVendor = 11, + URLDesigner = 12, + LicenseDescription = 13, + LicenseInfoURL = 14, + + TypographicFamilyName = 16, + TypographicSubfamilyName = 17, + CompatibleFull = 18, + SampleText = 19, + PostScriptCIDFindfontName = 20, + WWSFamilyName = 21, + WWSSubfamilyName = 22, + LightBackgroundPalette = 23, + DarkBackgroundPalette = 24, + VariationsPostScriptNamePrefix = 25, + } + public class LangTagRecord { + public UInt16 Length { get; private set; } + public UInt16 LangTagOffset { get; private set; } + public String Value { get; private set; } + public LangTagRecord(UInt16 length, UInt16 langTagOffset) { + Length = length; + LangTagOffset = langTagOffset; + } + public void Load(BinaryReader reader, UInt32 origin) { + reader.BaseStream.Position = origin + LangTagOffset; + Value = Encoding.BigEndianUnicode.GetString(reader.ReadBytes(Length)); + } + } + public sealed class MetaTable : FontTable { + readonly UInt32 version; +#pragma warning disable IDE0052 // Reserved + readonly UInt32 flags; +#pragma warning restore IDE0052 // Reserved + readonly UInt32 dataMapCount; + readonly List dataMaps = new List(); + public MetaTable(BinaryReader reader, UInt32 offset) : base(reader, offset) { + version = reader.ReadUInt32(); + if (version != 1) throw new NotSupportedException(); + flags = reader.ReadUInt32(); + reader.ReadUInt32(); + dataMapCount = reader.ReadUInt32(); + for (UInt32 i = 0; i < dataMapCount; i++) + dataMaps.Add(new DataMap ( + reader.ReadTag(), + reader.ReadUInt32(), + reader.ReadUInt32() + )); + foreach (var i in dataMaps) + i.Load(reader, offset); + } + public sealed override IReadOnlyList GetItems() { + return dataMaps; + } + } + public class DataMap { + public String Tag { get; private set; } + public UInt32 DataOffset { get; private set; } + public UInt32 DataLength { get; private set; } + public String Value { get; private set; } + public DataMap(String tag, UInt32 dataOffset, UInt32 dataLength) { + Tag = tag; + DataOffset = dataOffset; + DataLength = dataLength; + } + public void Load(BinaryReader reader, UInt32 origin) { + reader.BaseStream.Position = origin + DataOffset; + Value = Encoding.ASCII.GetString(reader.ReadBytes((int)DataLength)); + } + } + public static class BinaryReaderExtensions { + public static string ReadTag(this BinaryReader reader) { + return Encoding.ASCII.GetString(reader.ReadBytes(4)); + } + } +} diff --git a/Assets/Cryville.Common/Font/FontTable.cs.meta b/Assets/Cryville.Common/Font/FontTable.cs.meta new file mode 100644 index 0000000..002cbd3 --- /dev/null +++ b/Assets/Cryville.Common/Font/FontTable.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3805282a4858eec4d8ff91826ed7e896 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Cryville.Common/Font/Typeface.cs b/Assets/Cryville.Common/Font/Typeface.cs new file mode 100644 index 0000000..b6c7c15 --- /dev/null +++ b/Assets/Cryville.Common/Font/Typeface.cs @@ -0,0 +1,31 @@ +using System.IO; +using System.Linq; + +namespace Cryville.Common.Font { + public abstract class Typeface { + public FileInfo File { get; private set; } + public int IndexInFile { get; private set; } + public string FamilyName { get; protected set; } + public string SubfamilyName { get; protected set; } + public string FullName { get; protected set; } + protected abstract void GetName(BinaryReader reader); + + public Typeface(BinaryReader reader, FileInfo file, int index) { + File = file; + IndexInFile = index; + GetName(reader); + } + } + public class TypefaceTTF : Typeface { + public TypefaceTTF(BinaryReader reader, FileInfo file, int index) + : base(reader, file, index) { } + + protected override void GetName(BinaryReader reader) { + var dir = new TableDirectory(reader, (uint)reader.BaseStream.Position); + var nameTable = (NameTable)dir.GetSubTable((from i in dir.GetItems() where i.tableTag == "name" select i).Single()); + FamilyName = (from i in nameTable.GetItems() where i.NameID == NameID.FontFamilyName && i.Value != null select i.Value).First(); + SubfamilyName = (from i in nameTable.GetItems() where i.NameID == NameID.FontSubfamilyName && i.Value != null select i.Value).First(); + FullName = (from i in nameTable.GetItems() where i.NameID == NameID.FullFontName && i.Value != null select i.Value).First(); + } + } +} diff --git a/Assets/Cryville.Common/Font/Typeface.cs.meta b/Assets/Cryville.Common/Font/Typeface.cs.meta new file mode 100644 index 0000000..28f8302 --- /dev/null +++ b/Assets/Cryville.Common/Font/Typeface.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 943e0cf54256f2a479996d877b2b0e84 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Cryville.Common/IO.meta b/Assets/Cryville.Common/IO.meta new file mode 100644 index 0000000..55e9ecb --- /dev/null +++ b/Assets/Cryville.Common/IO.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: dbb2a81779b10f34489a8c83287d48bc +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Cryville.Common/IO/BinaryReaderBE.cs b/Assets/Cryville.Common/IO/BinaryReaderBE.cs new file mode 100644 index 0000000..da958e5 --- /dev/null +++ b/Assets/Cryville.Common/IO/BinaryReaderBE.cs @@ -0,0 +1,75 @@ +using System; +using System.IO; +using System.Text; + +namespace Cryville.Common.IO { + public class BinaryReaderBE : BinaryReader { + readonly byte[] m_buffer = new byte[8]; + + public BinaryReaderBE(Stream input) : base(input) { } + + public BinaryReaderBE(Stream input, Encoding encoding) : base(input, encoding) { } + + public BinaryReaderBE(Stream input, Encoding encoding, bool leaveOpen) : base(input, encoding, leaveOpen) { } + + public override short ReadInt16() { + FillBuffer(2); + return (short)(m_buffer[1] | (m_buffer[0] << 8)); + } + public override ushort ReadUInt16() { + FillBuffer(2); + return (ushort)(m_buffer[1] | (m_buffer[0] << 8)); + } + + public override int ReadInt32() { + FillBuffer(4); + return m_buffer[3] | (m_buffer[2] << 8) | (m_buffer[1] << 16) | (m_buffer[0] << 24); + } + public override uint ReadUInt32() { + FillBuffer(4); + return (uint)(m_buffer[3] | (m_buffer[2] << 8) | (m_buffer[1] << 16) | (m_buffer[0] << 24)); + } + + public override long ReadInt64() { + FillBuffer(8); + uint num = (uint)(m_buffer[7] | (m_buffer[6] << 8) | (m_buffer[5] << 16) | (m_buffer[4] << 24)); + uint num2 = (uint)(m_buffer[3] | (m_buffer[2] << 8) | (m_buffer[1] << 16) | (m_buffer[0] << 24)); + return (long)(((ulong)num2 << 32) | num); + } + public override ulong ReadUInt64() { + FillBuffer(8); + uint num = (uint)(m_buffer[7] | (m_buffer[6] << 8) | (m_buffer[5] << 16) | (m_buffer[4] << 24)); + uint num2 = (uint)(m_buffer[3] | (m_buffer[2] << 8) | (m_buffer[1] << 16) | (m_buffer[0] << 24)); + return ((ulong)num2 << 32) | num; + } + protected new void FillBuffer(int numBytes) { + if (m_buffer != null && (numBytes < 0 || numBytes > m_buffer.Length)) { + throw new ArgumentOutOfRangeException("numBytes", "Requested numBytes is larger than the internal buffer size"); + } + + int num = 0, num2; + if (BaseStream == null) { + throw new IOException("File not open"); + } + + if (numBytes == 1) { + num2 = BaseStream.ReadByte(); + if (num2 == -1) { + throw new EndOfStreamException("The end of the stream is reached before numBytes could be read"); + } + m_buffer[0] = (byte)num2; + return; + } + + do { + num2 = BaseStream.Read(m_buffer, num, numBytes - num); + if (num2 == 0) { + throw new EndOfStreamException("The end of the stream is reached before numBytes could be read"); + } + + num += num2; + } + while (num < numBytes); + } + } +} diff --git a/Assets/Cryville.Common/IO/BinaryReaderBE.cs.meta b/Assets/Cryville.Common/IO/BinaryReaderBE.cs.meta new file mode 100644 index 0000000..bcca282 --- /dev/null +++ b/Assets/Cryville.Common/IO/BinaryReaderBE.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8eaf9874d914c1349aabbb884c54b2d7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Cryville.Common/Unity.meta b/Assets/Cryville.Common/Unity.meta new file mode 100644 index 0000000..9fd7e95 --- /dev/null +++ b/Assets/Cryville.Common/Unity.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: bf3461b95c913eb44b2f2e653bf5eb79 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Cryville.Common/Unity/UI.meta b/Assets/Cryville.Common/Unity/UI.meta new file mode 100644 index 0000000..f0a4f2b --- /dev/null +++ b/Assets/Cryville.Common/Unity/UI.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ad96c636bfa80024f8427b7755b56639 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Cryville.Common/Unity/UI/AspectRatioLayoutElement.cs b/Assets/Cryville.Common/Unity/UI/AspectRatioLayoutElement.cs new file mode 100644 index 0000000..025a6c2 --- /dev/null +++ b/Assets/Cryville.Common/Unity/UI/AspectRatioLayoutElement.cs @@ -0,0 +1,113 @@ +using UnityEngine; +using UnityEngine.EventSystems; +using UnityEngine.UI; + +namespace Cryville.Common.Unity.UI { + /// + /// A that takes the length of one axis to compute the preferred length of the other axis with respect to a aspect ratio. + /// + [AddComponentMenu("Layout/Aspect Ratio Layout Element")] + [ExecuteAlways] + public class AspectRatioLayoutElement : UIBehaviour, ILayoutElement { + [SerializeField] + [Tooltip("The aspect ratio. Width divided by height.")] + private float m_aspectRatio = 1; + /// + /// The aspect ratio. Width divided by height. + /// + public float AspectRatio { + get { return m_aspectRatio; } + set { SetProperty(ref m_aspectRatio, value); } + } + + [SerializeField] + [Tooltip("Whether to compute the length of the y axis.")] + private bool m_isVertical = false; + /// + /// Whether to compute the length of the y axis. + /// + public bool IsVertical { + get { return m_isVertical; } + set { SetProperty(ref m_isVertical, value); } + } + + private void SetProperty(ref T prop, T value) { + if (Equals(prop, value)) return; + prop = value; + SetDirty(); + } + + /// + public float minWidth { + get { + return m_isVertical ? -1 : (transform as RectTransform).rect.height * m_aspectRatio; + } + } + /// + public float preferredWidth { get { return minWidth; } } + /// + public float flexibleWidth { get { return -1; } } + + /// + public float minHeight { + get { + return m_isVertical ? (transform as RectTransform).rect.width / m_aspectRatio : -1; + } + } + /// + public float preferredHeight { get { return minHeight; } } + /// + public float flexibleHeight { get { return -1; } } + + /// + public int layoutPriority { get { return 1; } } + + /// + public void CalculateLayoutInputHorizontal() { } + + /// + public void CalculateLayoutInputVertical() { } + + protected override void OnEnable() { + base.OnEnable(); + SetDirty(); + } + protected override void OnBeforeTransformParentChanged() { + base.OnBeforeTransformParentChanged(); + SetDirty(); + } + protected override void OnTransformParentChanged() { + base.OnTransformParentChanged(); + SetDirty(); + } + protected override void OnDidApplyAnimationProperties() { + base.OnDidApplyAnimationProperties(); + SetDirty(); + } +#if UNITY_EDITOR + protected override void OnValidate() { + base.OnValidate(); + SetDirty(); + } +#endif + protected override void OnDisable() { + SetDirty(); + base.OnDisable(); + } + protected override void OnRectTransformDimensionsChange() { + base.OnRectTransformDimensionsChange(); + SetDirty(); + } + bool _delayedSetDirty; + private void SetDirty() { + if (!IsActive()) return; + if (CanvasUpdateRegistry.IsRebuildingLayout()) _delayedSetDirty = true; + else LayoutRebuilder.MarkLayoutForRebuild(transform as RectTransform); + } + void Update() { + if (!_delayedSetDirty) return; + _delayedSetDirty = false; + LayoutRebuilder.MarkLayoutForRebuild(transform as RectTransform); + } + } +} diff --git a/Assets/Cryville.Common/Unity/UI/AspectRatioLayoutElement.cs.meta b/Assets/Cryville.Common/Unity/UI/AspectRatioLayoutElement.cs.meta new file mode 100644 index 0000000..9c0ce14 --- /dev/null +++ b/Assets/Cryville.Common/Unity/UI/AspectRatioLayoutElement.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 96276a3ffc8f32c4fbb7035a6fb28e74 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Cryville.Common/Unity/UI/DockAspectRatioLayoutGroup.cs b/Assets/Cryville.Common/Unity/UI/DockAspectRatioLayoutGroup.cs new file mode 100644 index 0000000..5975550 --- /dev/null +++ b/Assets/Cryville.Common/Unity/UI/DockAspectRatioLayoutGroup.cs @@ -0,0 +1,24 @@ +using UnityEngine; + +namespace Cryville.Common.Unity.UI { + /// + /// A that sets the aspect ratio of the docking element. + /// + [AddComponentMenu("Layout/Dock Aspect Ratio Layout Group")] + public sealed class DockAspectRatioLayoutGroup : DockLayoutGroup { + [SerializeField] + [Tooltip("The aspect ratio of the docking element.")] + private float m_dockAspectRatio = 1; + /// + /// The aspect ratio of the docking element. + /// + public float DockAspectRatio { + get { return m_dockAspectRatio; } + set { base.SetProperty(ref m_dockAspectRatio, value); } + } + + protected override float GetDockElementSize(Vector2 groupSize) { + return groupSize.y * m_dockAspectRatio; + } + } +} diff --git a/Assets/Cryville.Common/Unity/UI/DockAspectRatioLayoutGroup.cs.meta b/Assets/Cryville.Common/Unity/UI/DockAspectRatioLayoutGroup.cs.meta new file mode 100644 index 0000000..da3936e --- /dev/null +++ b/Assets/Cryville.Common/Unity/UI/DockAspectRatioLayoutGroup.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9023f24d2fe04fe45bf66a9d029591c1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Cryville.Common/Unity/UI/DockLayoutGroup.cs b/Assets/Cryville.Common/Unity/UI/DockLayoutGroup.cs new file mode 100644 index 0000000..09bfea0 --- /dev/null +++ b/Assets/Cryville.Common/Unity/UI/DockLayoutGroup.cs @@ -0,0 +1,136 @@ +using UnityEngine; +using UnityEngine.UI; + +namespace Cryville.Common.Unity.UI { + /// + /// A that docks its first child element to one side. + /// + public abstract class DockLayoutGroup : LayoutGroup { + /// + /// The dock side. + /// + public enum Side { + /// + /// Top. + /// + Top = 0, + /// + /// Right. + /// + Right = 1, + /// + /// Bottom. + /// + Bottom = 2, + /// + /// Left. + /// + Left = 3, + } + [SerializeField] + [Tooltip("The docking side of the first child element.")] + private Side m_side; + /// + /// The docking side of the first child element. + /// + public Side DockSide { + get { return m_side; } + set { SetProperty(ref m_side, value); } + } + + [SerializeField] + [Tooltip("The slide index. The children slide along the cross axis.")] + private float m_slideIndex; + /// + /// The slide index. The children slide along the axis. + /// + public float SlideIndex { + get { return m_slideIndex; } + set { SetProperty(ref m_slideIndex, value); } + } + + /// + public sealed override void CalculateLayoutInputHorizontal() { base.CalculateLayoutInputHorizontal(); CalcAlongAxis(0); } + /// + public sealed override void CalculateLayoutInputVertical() { CalcAlongAxis(1); } + /// + public sealed override void SetLayoutHorizontal() { SetChildrenAlongAxis(0); } + /// + public sealed override void SetLayoutVertical() { SetChildrenAlongAxis(1); } + + private void CalcAlongAxis(int axis) { + int isHorizontal = (int)m_side & 1; + if ((isHorizontal ^ axis) == 1) { + SetLayoutInputForAxis(0, 0, 1, axis); // TODO + } + else { + float padding = isHorizontal == 0 ? m_Padding.horizontal : m_Padding.vertical; + float totalMin = 0, totalPreferred = 0, totalFlexible = 0; + for (int i = 0; i < rectChildren.Count; i++) { + GetChildSizes(rectChildren[i], axis, out float min, out float preferred, out float flexible); + if (min > totalMin) totalMin = min; + if (preferred > totalPreferred) totalPreferred = preferred; + if (flexible > totalFlexible) totalFlexible = flexible; + } + SetLayoutInputForAxis(totalMin + padding, totalPreferred + padding, totalFlexible, axis); + } + } + private void GetChildSizes(RectTransform child, int axis, out float min, out float preferred, out float flexible) { + min = LayoutUtility.GetMinSize(child, axis); + preferred = LayoutUtility.GetPreferredSize(child, axis); + flexible = LayoutUtility.GetFlexibleSize(child, axis); + } + + private float GetSlidePosition(float groupHeight, float dockHeight) { + bool d = Mathf.FloorToInt(m_slideIndex - Mathf.Floor(m_slideIndex / 2) * 2) == 0; + int l = Mathf.FloorToInt(m_slideIndex / 2); + float p = m_slideIndex - Mathf.Floor(m_slideIndex); + if (d) return l * groupHeight + p * dockHeight; + else return l * groupHeight + dockHeight + p * (groupHeight - dockHeight); + } + + private void SetChildrenAlongAxis(int axis) { + int isHorizontal = (int)m_side & 1; + bool isReversed = m_side == Side.Right || m_side == Side.Bottom; + var rect = rectTransform.rect; + if ((isHorizontal ^ axis) == 1) { + float p0 = isHorizontal == 1 ? m_Padding.left : m_Padding.top; + float p1 = isHorizontal == 1 ? m_Padding.right : m_Padding.bottom; + var gs = rect.size - new Vector2(m_Padding.horizontal, m_Padding.vertical); + if (isHorizontal == 0) gs = new Vector2(gs.y, gs.x); + if (rectChildren.Count == 1) { + SetChildAlongAxis(rectChildren[0], axis, p0, gs.x); + } + else { + float s1 = GetDockElementSize(gs); + float s0 = GetSlidePosition(gs.x, s1); + float a1 = (isHorizontal == 0 ? rect.height : rect.width) - p0 - p1; + for (int i = 0; i < rectChildren.Count; i++) { + var c = rectChildren[i]; + bool d = i % 2 == 0; + int l = i / 2; + if (isReversed) + SetChildAlongAxis(c, axis, (d ? a1 - s1 + p0 : p0) - a1 * l + s0, d ? s1 : a1 - s1); + else + SetChildAlongAxis(c, axis, (d ? p0 : s1 + p0) - s0 + a1 * l, d ? s1 : a1 - s1); + } + } + } + else { + float p0 = isHorizontal == 0 ? m_Padding.left : m_Padding.top; + float p1 = isHorizontal == 0 ? m_Padding.right : m_Padding.bottom; + var height = (isHorizontal == 1 ? rect.height : rect.width) - p0 - p1; + for (int i = 0; i < rectChildren.Count; i++) { + SetChildAlongAxis(rectChildren[i], axis, p0, height); + } + } + } + + /// + /// Gets the length of the first child element along the axis. + /// + /// The size of the layout group. + /// + protected abstract float GetDockElementSize(Vector2 groupSize); + } +} diff --git a/Assets/Cryville.Common/Unity/UI/DockLayoutGroup.cs.meta b/Assets/Cryville.Common/Unity/UI/DockLayoutGroup.cs.meta new file mode 100644 index 0000000..8d67623 --- /dev/null +++ b/Assets/Cryville.Common/Unity/UI/DockLayoutGroup.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fb94861327965934cb429511060d45fb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Cryville.Common/Unity/UI/DockOccupiedRatioLayoutGroup.cs b/Assets/Cryville.Common/Unity/UI/DockOccupiedRatioLayoutGroup.cs new file mode 100644 index 0000000..8d67542 --- /dev/null +++ b/Assets/Cryville.Common/Unity/UI/DockOccupiedRatioLayoutGroup.cs @@ -0,0 +1,24 @@ +using UnityEngine; + +namespace Cryville.Common.Unity.UI { + /// + /// A that sets the occupied ratio of the docking element. + /// + [AddComponentMenu("Layout/Dock Occupied Ratio Layout Group")] + public sealed class DockOccupiedRatioLayoutGroup : DockLayoutGroup { + [SerializeField] + [Tooltip("The occupied ratio of the docking element.")] + private float m_dockOccupiedRatio = 1; + /// + /// The occupied ratio of the docking element. + /// + public float DockOccupiedRatio { + get { return m_dockOccupiedRatio; } + set { base.SetProperty(ref m_dockOccupiedRatio, value); } + } + + protected override float GetDockElementSize(Vector2 groupSize) { + return groupSize.x * m_dockOccupiedRatio; + } + } +} diff --git a/Assets/Cryville.Common/Unity/UI/DockOccupiedRatioLayoutGroup.cs.meta b/Assets/Cryville.Common/Unity/UI/DockOccupiedRatioLayoutGroup.cs.meta new file mode 100644 index 0000000..8376d5c --- /dev/null +++ b/Assets/Cryville.Common/Unity/UI/DockOccupiedRatioLayoutGroup.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0bbf3330df0a07e46bcdf0b3c4879ecf +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Cryville.Common/Unity/UI/FlowLayoutGroup.cs b/Assets/Cryville.Common/Unity/UI/FlowLayoutGroup.cs new file mode 100644 index 0000000..2d8a299 --- /dev/null +++ b/Assets/Cryville.Common/Unity/UI/FlowLayoutGroup.cs @@ -0,0 +1,97 @@ +using System; +using UnityEngine; +using UnityEngine.UI; + +namespace Cryville.Common.Unity.UI { + [AddComponentMenu("Layout/Flow Layout Group")] + public class FlowLayoutGroup : LayoutGroup { + [SerializeField] Vector2 m_spacing; + public Vector2 Spacing { + get { return m_spacing; } + set { SetProperty(ref m_spacing, value); } + } + + [SerializeField][Range(0, 1)] float m_itemAlignmentRatio; + public float ItemAlignmentRatio { + get { return m_itemAlignmentRatio; } + set { SetProperty(ref m_itemAlignmentRatio, value); } + } + + [SerializeField][Range(0, 1)] float m_itemAlignmentStretchingRatio; + public float ItemAlignmentStretchingRatio { + get { return m_itemAlignmentStretchingRatio; } + set { SetProperty(ref m_itemAlignmentStretchingRatio, value); } + } + + /// + public sealed override void CalculateLayoutInputHorizontal() { base.CalculateLayoutInputHorizontal(); CalcAlongAxis(0); } + /// + public sealed override void CalculateLayoutInputVertical() { CalcAlongAxis(1); } + /// + public sealed override void SetLayoutHorizontal() { SetChildrenAlongAxis(0); } + /// + public sealed override void SetLayoutVertical() { SetChildrenAlongAxis(1); } + + void CalcAlongAxis(int axis) { + if (axis == 0) { + SetLayoutInputForAxis(0, 0, 1, axis); // TODO + } + else { + float width = rectTransform.rect.width - padding.horizontal; + float x = 0, y = padding.top; + float lineHeight = 0; + for (int i = 0; i < rectChildren.Count; i++) { + RectTransform child = rectChildren[i]; + float minWidth = LayoutUtility.GetMinWidth(child); + float childWidth = Math.Max(minWidth, Math.Min(width, LayoutUtility.GetPreferredWidth(child))); + float childHeight = LayoutUtility.GetPreferredHeight(child); + + if (childWidth > width - x) { + x = 0; + if (i > 0) y += lineHeight + m_spacing.y; + lineHeight = 0; + } + + x += childWidth + m_spacing.x; + if (childHeight > lineHeight) lineHeight = childHeight; + } + SetLayoutInputForAxis(y + lineHeight, y + lineHeight, 0, 1); + } + } + + void SetChildrenAlongAxis(int axis) { + float width = rectTransform.rect.width - padding.horizontal; + float x = 0, y = padding.top; + float lineHeight = 0; + int firstItemIndexOfLine = 0; + for (int i = 0; i < rectChildren.Count; i++) { + RectTransform child = rectChildren[i]; + float minWidth = LayoutUtility.GetMinWidth(child); + float childWidth = Math.Max(minWidth, Math.Min(width, LayoutUtility.GetPreferredWidth(child))); + float childHeight = LayoutUtility.GetPreferredHeight(child); + + if (childWidth > width - x) { + AlignItemsInLine(firstItemIndexOfLine, i, y, lineHeight); + x = 0; + if (i > 0) y += lineHeight + m_spacing.y; + lineHeight = 0; + firstItemIndexOfLine = i; + } + + SetChildAlongAxis(child, 0, x + padding.left, childWidth); + SetChildAlongAxis(child, 1, y, childHeight); + + x += childWidth + m_spacing.x; + if (childHeight > lineHeight) lineHeight = childHeight; + } + AlignItemsInLine(firstItemIndexOfLine, rectChildren.Count, y, lineHeight); + } + void AlignItemsInLine(int startIndex, int endIndex, float y, float lineHeight) { + for (int i = startIndex; i < endIndex; i++) { + RectTransform child = rectChildren[i]; + float childHeight = LayoutUtility.GetPreferredHeight(child) * (1 - m_itemAlignmentStretchingRatio) + lineHeight * m_itemAlignmentStretchingRatio; + SetChildAlongAxis(child, 1, y + (lineHeight - childHeight) * m_itemAlignmentRatio, childHeight); + } + } + } +} diff --git a/Assets/Cryville.Common/Unity/UI/FlowLayoutGroup.cs.meta b/Assets/Cryville.Common/Unity/UI/FlowLayoutGroup.cs.meta new file mode 100644 index 0000000..830d309 --- /dev/null +++ b/Assets/Cryville.Common/Unity/UI/FlowLayoutGroup.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1ce1debad67438245a6e00e503975beb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Cryville.Common/Unity/UI/SingleLayoutGroup.cs b/Assets/Cryville.Common/Unity/UI/SingleLayoutGroup.cs new file mode 100644 index 0000000..086cb07 --- /dev/null +++ b/Assets/Cryville.Common/Unity/UI/SingleLayoutGroup.cs @@ -0,0 +1,94 @@ +using UnityEngine; +using UnityEngine.UI; + +namespace Cryville.Common.Unity.UI { + [AddComponentMenu("Layout/Single Layout Group")] + [ExecuteAlways] + public class SingleLayoutGroup : LayoutGroup { + [SerializeField] + protected bool m_ChildForceExpandWidth = true; + + [SerializeField] + protected bool m_ChildForceExpandHeight = true; + + [SerializeField] + protected bool m_ChildControlWidth = true; + + [SerializeField] + protected bool m_ChildControlHeight = true; + + [SerializeField] + protected bool m_ChildScaleWidth; + + [SerializeField] + protected bool m_ChildScaleHeight; + + public override void CalculateLayoutInputHorizontal() { + base.CalculateLayoutInputHorizontal(); + CalcAlongAxis(0); + } + public override void CalculateLayoutInputVertical() { CalcAlongAxis(1); } + public override void SetLayoutHorizontal() { SetChildrenAlongAxis(0); } + public override void SetLayoutVertical() { SetChildrenAlongAxis(1); } + + protected void CalcAlongAxis(int axis) { + float combinedPadding = (axis == 0) ? padding.horizontal : padding.vertical; + bool controlSize = (axis == 0) ? m_ChildControlWidth : m_ChildControlHeight; + bool useScale = (axis == 0) ? m_ChildScaleWidth : m_ChildScaleHeight; + bool childForceExpandSize = (axis == 0) ? m_ChildForceExpandWidth : m_ChildForceExpandHeight; + float totalMin = combinedPadding; + float totalPreferred = combinedPadding; + float totalFlexible = 0f; + RectTransform child = rectChildren[0]; + GetChildSizes(child, axis, controlSize, childForceExpandSize, out var min, out var preferred, out var flexible); + if (useScale) { + float scaleFactor = child.localScale[axis]; + min *= scaleFactor; + preferred *= scaleFactor; + flexible *= scaleFactor; + } + totalMin = Mathf.Max(min + combinedPadding, totalMin); + totalPreferred = Mathf.Max(preferred + combinedPadding, totalPreferred); + totalFlexible = Mathf.Max(flexible, totalFlexible); + totalPreferred = Mathf.Max(totalMin, totalPreferred); + SetLayoutInputForAxis(totalMin, totalPreferred, totalFlexible, axis); + } + + protected void SetChildrenAlongAxis(int axis) { + float size = rectTransform.rect.size[axis]; + bool controlSize = (axis == 0) ? m_ChildControlWidth : m_ChildControlHeight; + bool useScale = (axis == 0) ? m_ChildScaleWidth : m_ChildScaleHeight; + bool childForceExpandSize = (axis == 0) ? m_ChildForceExpandWidth : m_ChildForceExpandHeight; + float alignmentOnAxis = GetAlignmentOnAxis(axis); + float innerSize = size - ((axis == 0) ? padding.horizontal : padding.vertical); + RectTransform child = rectChildren[0]; + GetChildSizes(child, axis, controlSize, childForceExpandSize, out var min2, out var preferred2, out var flexible2); + float scaleFactor2 = useScale ? child.localScale[axis] : 1f; + float requiredSpace = Mathf.Clamp(innerSize, min2, (flexible2 > 0f) ? size : preferred2); + float startOffset = GetStartOffset(axis, requiredSpace * scaleFactor2); + if (controlSize) { + SetChildAlongAxisWithScale(child, axis, startOffset, requiredSpace, scaleFactor2); + } + else { + float offsetInCell2 = (requiredSpace - child.sizeDelta[axis]) * alignmentOnAxis; + SetChildAlongAxisWithScale(child, axis, startOffset + offsetInCell2, scaleFactor2); + } + } + + void GetChildSizes(RectTransform child, int axis, bool controlSize, bool childForceExpand, out float min, out float preferred, out float flexible) { + if (!controlSize) { + min = child.sizeDelta[axis]; + preferred = min; + flexible = 0f; + } + else { + min = LayoutUtility.GetMinSize(child, axis); + preferred = LayoutUtility.GetPreferredSize(child, axis); + flexible = LayoutUtility.GetFlexibleSize(child, axis); + } + if (childForceExpand) { + flexible = Mathf.Max(flexible, 1f); + } + } + } +} diff --git a/Assets/Cryville.Common/Unity/UI/SingleLayoutGroup.cs.meta b/Assets/Cryville.Common/Unity/UI/SingleLayoutGroup.cs.meta new file mode 100644 index 0000000..9c1756a --- /dev/null +++ b/Assets/Cryville.Common/Unity/UI/SingleLayoutGroup.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 21255a16576b76f4280a765b43a4ae1c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Cryville.Common/Unity/UI/TMPLocalizedText.cs b/Assets/Cryville.Common/Unity/UI/TMPLocalizedText.cs new file mode 100644 index 0000000..df46181 --- /dev/null +++ b/Assets/Cryville.Common/Unity/UI/TMPLocalizedText.cs @@ -0,0 +1,80 @@ +using Cryville.Common.Font; +using Cryville.Culture; +using System; +using System.Collections.Generic; +using System.Globalization; +using System.Reflection; +using TMPro; +using UnityEngine; +using UnityEngine.TextCore.LowLevel; +using UnityEngine.TextCore.Text; + +namespace Cryville.Common.Unity.UI { + [RequireComponent(typeof(TMP_Text))] + public class TMPLocalizedText : MonoBehaviour { + public static Shader DefaultShader; + public static FontMatcher FontMatcher; + public static int MaxFallbackCount = 4; + + static readonly Dictionary _cachedFonts = new(); + + [SerializeField] + Shader m_shader; + + public TMP_Text Text { get; private set; } + void Awake() { + Text = GetComponent(); + } + + public void SetText(string text, CultureInfo culture = null) { + Text.text = text; + SetCulture(culture ?? CultureInfo.CurrentCulture); + } + + void SetCulture(CultureInfo culture) { + if (FontMatcher == null) return; + string cultureName = culture.Name; + if (string.IsNullOrEmpty(cultureName)) cultureName = CultureInfo.CurrentCulture.Name; + if (!_cachedFonts.TryGetValue(culture, out var font)) { + foreach (var typeface in FontMatcher.MatchLanguage(new LanguageId(cultureName), true)) { + try { + var ifont = CreateFontAsset(typeface.File.FullName, typeface.IndexInFile); + if (m_shader) ifont.material.shader = m_shader; + else if (DefaultShader) ifont.material.shader = DefaultShader; + if (font == null) { + font = ifont; + if (MaxFallbackCount <= 0) break; + } + else { + font.fallbackFontAssetTable ??= new List(); + font.fallbackFontAssetTable.Add(ifont); + if (font.fallbackFontAssetTable.Count >= MaxFallbackCount) break; + } + } + catch (Exception) { } + } + _cachedFonts.Add(culture, font); + } + Text.font = font; + } + + static MethodInfo _methodCreateFontAsset; + static readonly object[] _paramsCreateFontAsset = new object[] { null, null, 90, 9, GlyphRenderMode.SDFAA, 1024, 1024, Type.Missing, Type.Missing }; + static FontAsset CreateFontAsset(string path, int index) { + if (_methodCreateFontAsset == null) { + _methodCreateFontAsset = typeof(FontAsset).GetMethod( + "CreateFontAsset", BindingFlags.Static | BindingFlags.NonPublic, null, + new Type[] { + typeof(string), typeof(int), typeof(int), typeof(int), + typeof(GlyphRenderMode), typeof(int), typeof(int), + typeof(AtlasPopulationMode), typeof(bool) + }, + null + ); + } + _paramsCreateFontAsset[0] = path; + _paramsCreateFontAsset[1] = index; + return (FontAsset)_methodCreateFontAsset.Invoke(null, _paramsCreateFontAsset); + } + } +} diff --git a/Assets/Cryville.Common/Unity/UI/TMPLocalizedText.cs.meta b/Assets/Cryville.Common/Unity/UI/TMPLocalizedText.cs.meta new file mode 100644 index 0000000..dbc50e3 --- /dev/null +++ b/Assets/Cryville.Common/Unity/UI/TMPLocalizedText.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c03870a7d4386e846be005a0ac36e987 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Cryville.EEW.Unity.meta b/Assets/Cryville.EEW.Unity.meta new file mode 100644 index 0000000..055a5e3 --- /dev/null +++ b/Assets/Cryville.EEW.Unity.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c47cfa4f1761c7c438e882cd9bf3fa60 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Cryville.EEW.Unity/App.cs b/Assets/Cryville.EEW.Unity/App.cs new file mode 100644 index 0000000..f238d0a --- /dev/null +++ b/Assets/Cryville.EEW.Unity/App.cs @@ -0,0 +1,43 @@ +using Cryville.Common.Font; +using Cryville.Common.Unity.UI; +using Cryville.Crtr; +using Cryville.Culture; +using System.IO; +using System.Text; +using System.Xml.Linq; +using System.Xml; +using UnityEngine; + +namespace Cryville.EEW.Unity { + class App { + static bool _init; + public static void Init() { + if (_init) return; + _init = true; + + foreach (var res in Resources.LoadAll("cldr/common/validity")) { + IdValidity.Load(LoadXmlDocument(res)); + } + var metadata = new SupplementalMetadata(LoadXmlDocument("cldr/common/supplemental/supplementalMetadata")); + var subtags = new LikelySubtags(LoadXmlDocument("cldr/common/supplemental/likelySubtags"), metadata); + var matcher = new LanguageMatching(LoadXmlDocument("cldr/common/supplemental/languageInfo"), subtags); + TMPLocalizedText.FontMatcher = new FallbackListFontMatcher(matcher, PlatformConfig.FontManager) { + MapScriptToTypefaces = PlatformConfig.ScriptFontMap + }; + TMPLocalizedText.DefaultShader = Resources.Load(PlatformConfig.TextShader); + } + + static readonly Encoding _encoding = new UTF8Encoding(false, true); + static readonly XmlReaderSettings _xmlSettings = new() { + DtdProcessing = DtdProcessing.Ignore, + }; + static XDocument LoadXmlDocument(string path) { + return LoadXmlDocument(Resources.Load(path)); + } + static XDocument LoadXmlDocument(TextAsset asset) { + using var stream = new MemoryStream(_encoding.GetBytes(asset.text)); + using var reader = XmlReader.Create(stream, _xmlSettings); + return XDocument.Load(reader); + } + } +} diff --git a/Assets/Cryville.EEW.Unity/App.cs.meta b/Assets/Cryville.EEW.Unity/App.cs.meta new file mode 100644 index 0000000..48e7aea --- /dev/null +++ b/Assets/Cryville.EEW.Unity/App.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c99e48f1a8befc34eb40305cdd762f9f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Cryville.EEW.Unity/ColorUtils.cs b/Assets/Cryville.EEW.Unity/ColorUtils.cs new file mode 100644 index 0000000..d21f456 --- /dev/null +++ b/Assets/Cryville.EEW.Unity/ColorUtils.cs @@ -0,0 +1,7 @@ +using UnityEngine; + +namespace Cryville.EEW.Unity { + static class ColorUtils { + public static Color ToUnityColor(this System.Drawing.Color color) => new(color.R / 255f, color.G / 255f, color.B / 255f, color.A / 255f); + } +} diff --git a/Assets/Cryville.EEW.Unity/ColorUtils.cs.meta b/Assets/Cryville.EEW.Unity/ColorUtils.cs.meta new file mode 100644 index 0000000..f1dfd13 --- /dev/null +++ b/Assets/Cryville.EEW.Unity/ColorUtils.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1360d2ab5159d7845b4e8f1df463d514 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Cryville.EEW.Unity/Cryville.EEW.Unity.asmdef b/Assets/Cryville.EEW.Unity/Cryville.EEW.Unity.asmdef new file mode 100644 index 0000000..ffbcdd6 --- /dev/null +++ b/Assets/Cryville.EEW.Unity/Cryville.EEW.Unity.asmdef @@ -0,0 +1,18 @@ +{ + "name": "Cryville.EEW.Unity", + "rootNamespace": "", + "references": [ + "GUID:b92f9c7ac10b1c04e86fc48210f62ab1", + "GUID:e5b7e7f40a80a814ba706299d68f9213", + "GUID:da293eebbcb9a4947a212534c52d1a32" + ], + "includePlatforms": [], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": false, + "defineConstraints": [], + "versionDefines": [], + "noEngineReferences": false +} \ No newline at end of file diff --git a/Assets/Cryville.EEW.Unity/Cryville.EEW.Unity.asmdef.meta b/Assets/Cryville.EEW.Unity/Cryville.EEW.Unity.asmdef.meta new file mode 100644 index 0000000..ca672c1 --- /dev/null +++ b/Assets/Cryville.EEW.Unity/Cryville.EEW.Unity.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: d21cf2141c549ce4193d48fa497a21bd +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Cryville.EEW.Unity/LocalizedResourcesManager.cs b/Assets/Cryville.EEW.Unity/LocalizedResourcesManager.cs new file mode 100644 index 0000000..3d86bb7 --- /dev/null +++ b/Assets/Cryville.EEW.Unity/LocalizedResourcesManager.cs @@ -0,0 +1,13 @@ +using Cryville.EEW.Core; +using System.IO; +using UnityEngine; + +namespace Cryville.EEW.Unity { + sealed class LocalizedResourcesManager : JSONFileLocalizedResourceManager { + protected override Stream Open(string path) { + path = Path.Combine(Application.streamingAssetsPath, "Messages", path); + if (!File.Exists(path)) return null; + return new FileStream(path, FileMode.Open, FileAccess.Read); + } + } +} diff --git a/Assets/Cryville.EEW.Unity/LocalizedResourcesManager.cs.meta b/Assets/Cryville.EEW.Unity/LocalizedResourcesManager.cs.meta new file mode 100644 index 0000000..0983746 --- /dev/null +++ b/Assets/Cryville.EEW.Unity/LocalizedResourcesManager.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 725cac357fd552542822cbf163b7affa +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Cryville.EEW.Unity/Map.meta b/Assets/Cryville.EEW.Unity/Map.meta new file mode 100644 index 0000000..872eb49 --- /dev/null +++ b/Assets/Cryville.EEW.Unity/Map.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 96211bdddfa409a40a2e375d18b4e19d +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Cryville.EEW.Unity/Map/CameraController.cs b/Assets/Cryville.EEW.Unity/Map/CameraController.cs new file mode 100644 index 0000000..d922acb --- /dev/null +++ b/Assets/Cryville.EEW.Unity/Map/CameraController.cs @@ -0,0 +1,107 @@ +using System; +using System.Drawing; +using UnityEngine; + +namespace Cryville.EEW.Unity.Map { + [RequireComponent(typeof(Camera))] + sealed class CameraController : MonoBehaviour { + Camera _camera; + + [SerializeField] + Transform m_layerTile; + [SerializeField] + MapElementManager m_layerElement; + [SerializeField] + MapElementManager m_layerElementSub; + [SerializeField] + GameObject m_prefabTile; + + readonly MapTileCacheManager _tiles = new(); + float _elementLayerZ; + + void Start() { + _camera = GetComponent(); + _tiles.Parent = m_layerTile; + _tiles.PrefabTile = m_prefabTile; + _tiles.CacheDir = Application.temporaryCachePath; + _camera.orthographicSize = 0.5f / MathF.Max(1, (float)_camera.pixelWidth / _camera.pixelHeight); + _elementLayerZ = m_layerElement.transform.position.z; + UpdateTransform(); + } + void OnDestroy() { + _tiles.Dispose(); + } + + float Scale { + get => _camera.orthographicSize; + set => _camera.orthographicSize = Mathf.Clamp(value, 1e-3f, 0.5f / MathF.Max(1, (float)_camera.pixelWidth / _camera.pixelHeight)); + } + + static readonly Rect _viewportRect = new(0, 0, 1, 1); + Vector3? ppos; + void Update() { + var cpos = Input.mousePosition; + bool isMouseInViewport = _viewportRect.Contains(_camera.ScreenToViewportPoint(Input.mousePosition)); + if (Input.GetMouseButtonDown(0) && isMouseInViewport) { + ppos = cpos; + } + if (Input.GetMouseButton(0) && ppos is Vector3 pos0) { + var delta = _camera.ScreenToWorldPoint(pos0) - _camera.ScreenToWorldPoint(cpos); + transform.position += delta; + ppos = cpos; + UpdateTransform(); + } + if (Input.GetMouseButtonUp(0)) { + ppos = null; + } + if (Input.mouseScrollDelta.y != 0 && isMouseInViewport) { + Scale *= Mathf.Pow(2, -Input.mouseScrollDelta.y / 8); + UpdateTransform(); + } + } + + public void OnMapElementUpdated() { + var aabb = m_layerElement.AABB; + if (aabb is not RectangleF b) return; + if (b.Width * _camera.pixelHeight < _camera.pixelWidth * b.Height) + Scale = b.Height; + else + Scale = b.Width * _camera.pixelHeight / _camera.pixelWidth; + Scale *= 0.6f; + transform.localPosition = new PointF(b.X + b.Width / 2, b.Y + b.Height / 2).ToVector2(); + UpdateTransform(); + } + + void UpdateTransform() { + float h = _camera.orthographicSize * 2; + float w = h * _camera.pixelWidth / _camera.pixelHeight; + float vz = 1 / h * _camera.pixelHeight; + float nx = transform.position.x % 1; + if (nx < 0) nx += 1; + transform.localPosition = new(nx, Math.Clamp(transform.position.y, h / 2 - 1, -h / 2), -20); + + var bounds = new Bounds((Vector2)transform.position, new Vector2(w, h)); + int zoom = Math.Clamp((int)Math.Log(vz / 256, 2) + 1, 0, 10); + int zoomScale = 1 << zoom; + _tiles.MoveTo( + new(Mathf.FloorToInt(bounds.min.x * zoomScale), Mathf.FloorToInt(-bounds.max.y * zoomScale), zoom), + new(Mathf.CeilToInt(bounds.max.x * zoomScale), Mathf.CeilToInt(-bounds.min.y * zoomScale), zoom) + ); + + m_layerElement.Scale = h; + m_layerElementSub.Scale = h; + + if (nx - w / 2 < 0) { + m_layerElementSub.gameObject.SetActive(true); + m_layerElementSub.transform.localPosition = new(-1, 0, _elementLayerZ); + } + else if (nx + w / 2 > 1) { + m_layerElementSub.gameObject.SetActive(true); + m_layerElementSub.transform.localPosition = new(1, 0, _elementLayerZ); + } + else { + m_layerElementSub.gameObject.SetActive(false); + } + } + } +} diff --git a/Assets/Cryville.EEW.Unity/Map/CameraController.cs.meta b/Assets/Cryville.EEW.Unity/Map/CameraController.cs.meta new file mode 100644 index 0000000..febcffc --- /dev/null +++ b/Assets/Cryville.EEW.Unity/Map/CameraController.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 07c8433af4f94ee4b9fa3286a384ffe2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Cryville.EEW.Unity/Map/Element.meta b/Assets/Cryville.EEW.Unity/Map/Element.meta new file mode 100644 index 0000000..011f951 --- /dev/null +++ b/Assets/Cryville.EEW.Unity/Map/Element.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a2c2d746f0122b64a84ac5b921e0fadc +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Cryville.EEW.Unity/Map/Element/GroupElement.cs b/Assets/Cryville.EEW.Unity/Map/Element/GroupElement.cs new file mode 100644 index 0000000..c82a1c9 --- /dev/null +++ b/Assets/Cryville.EEW.Unity/Map/Element/GroupElement.cs @@ -0,0 +1,45 @@ +using Cryville.EEW.Core.Map; +using System.Collections.Generic; +using System.Drawing; +using UnityEngine; + +namespace Cryville.EEW.Unity.Map.Element { + class GroupElement : MapElement { + protected virtual Transform Container => transform; + + readonly List _elements = new(); + + public override RectangleF? AABB { + get { + RectangleF? ret = null; + foreach (var element in _elements) { + if (element == null) continue; + if (element.AABB is not RectangleF aabb) continue; + if (ret == null) ret = aabb; + else ret = MapTileUtils.UnionTileAABBs(ret.Value, aabb); + } + return ret; + } + } + + public virtual void AddElement(MapElement element) { + if (element == null) return; + element.Scale = Scale; + if (element.InheritMaterial) element.Material = Material; + element.transform.SetParent(Container, false); + _elements.Add(element); + } + + protected override void OnSetScale() { + foreach (Transform element in Container) { + element.GetComponent().Scale = Scale; + } + } + protected override void OnSetMaterial(Material material) { + foreach (Transform child in Container) { + var element = child.GetComponent(); + if (element.InheritMaterial) element.Material = Material; + } + } + } +} diff --git a/Assets/Cryville.EEW.Unity/Map/Element/GroupElement.cs.meta b/Assets/Cryville.EEW.Unity/Map/Element/GroupElement.cs.meta new file mode 100644 index 0000000..cf5f4e2 --- /dev/null +++ b/Assets/Cryville.EEW.Unity/Map/Element/GroupElement.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 44a27900867d2ef44bb67cb466c445d9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Cryville.EEW.Unity/Map/Element/HypocenterElement.cs b/Assets/Cryville.EEW.Unity/Map/Element/HypocenterElement.cs new file mode 100644 index 0000000..9d0d781 --- /dev/null +++ b/Assets/Cryville.EEW.Unity/Map/Element/HypocenterElement.cs @@ -0,0 +1,50 @@ +using Cryville.EEW.Core.Map; +using System.Drawing; +using UnityEngine; + +namespace Cryville.EEW.Unity.Map.Element { + [RequireComponent(typeof(SpriteRenderer))] + class HypocenterElement : MapElement { + [SerializeField] Sprite m_sprite; + [SerializeField] Sprite m_spriteLowQuality; + + PointF _tilePos; + public override RectangleF? AABB => new(_tilePos, SizeF.Empty); + + public void SetLocation(PointF location, ref int order) { + _tilePos = MapTileUtils.WorldToTilePos(location); + Vector3 pos = _tilePos.ToVector2(); + pos.z = OrderToZ(ref order); + transform.localPosition = pos; + } + + bool m_isLowQuality; + public bool IsLowQuality { + get => m_isLowQuality; + set { + if (m_isLowQuality == value) return; + m_isLowQuality = value; + _spriteRenderer.sprite = value ? m_spriteLowQuality : m_sprite; + } + } + + float m_size; + public float Size { + get => m_size; + set { + if (m_size == value) return; + m_size = value; + OnSetScale(); + } + } + + SpriteRenderer _spriteRenderer; + void Awake() { + _spriteRenderer = GetComponent(); + } + + protected override void OnSetScale() { + transform.localScale = ComputedScale * m_size / 256 * Vector3.one; + } + } +} diff --git a/Assets/Cryville.EEW.Unity/Map/Element/HypocenterElement.cs.meta b/Assets/Cryville.EEW.Unity/Map/Element/HypocenterElement.cs.meta new file mode 100644 index 0000000..a04978f --- /dev/null +++ b/Assets/Cryville.EEW.Unity/Map/Element/HypocenterElement.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 505a49fe5efac9247939cef8282923c4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Cryville.EEW.Unity/Map/Element/LabeledPointElement.cs b/Assets/Cryville.EEW.Unity/Map/Element/LabeledPointElement.cs new file mode 100644 index 0000000..59ea0d2 --- /dev/null +++ b/Assets/Cryville.EEW.Unity/Map/Element/LabeledPointElement.cs @@ -0,0 +1,90 @@ +using Cryville.EEW.Core.Map; +using System.Drawing; +using TMPro; +using UnityEngine; +using Color = UnityEngine.Color; + +namespace Cryville.EEW.Unity.Map.Element { + [RequireComponent(typeof(SpriteRenderer))] + class LabeledPointElement : MapElement { + [SerializeField] Sprite m_sprite; + [SerializeField] Sprite m_spriteArea; + [SerializeField] TextMeshPro m_textMesh; + + PointF _tilePos; + public override RectangleF? AABB => new(_tilePos, SizeF.Empty); + + public void SetLocation(PointF location, ref int order) { + _tilePos = MapTileUtils.WorldToTilePos(location); + Vector3 pos = _tilePos.ToVector2(); + pos.z = OrderToZ(ref order); + transform.localPosition = pos; + } + + [SerializeField] + string m_text = ""; + public string Text { + get => m_text; + set { + if (m_text == value) return; + m_text = value; + m_textMesh.text = value; + } + } + + [SerializeField] + Color m_color = Color.white; + public Color Color { + get => m_color; + set { + if (m_color == value) return; + m_color = value; + _spriteRenderer.color = value; + } + } + + [SerializeField] + Color m_textColor = Color.black; + public Color TextColor { + get => m_textColor; + set { + if (m_textColor == value) return; + m_textColor = value; + m_textMesh.color = value; + } + } + + bool m_isArea; + public bool IsArea { + get => m_isArea; + set { + if (m_isArea == value) return; + m_isArea = value; + _spriteRenderer.sprite = value ? m_spriteArea : m_sprite; + } + } + + float m_size; + public float Size { + get => m_size; + set { + if (m_size == value) return; + m_size = value; + OnSetScale(); + } + } + + SpriteRenderer _spriteRenderer; + void Awake() { + _spriteRenderer = GetComponent(); + m_textMesh.text = m_text; + _spriteRenderer.color = m_color; + m_textMesh.color = m_textColor; + _spriteRenderer.sprite = m_isArea ? m_spriteArea : m_sprite; + } + + protected override void OnSetScale() { + transform.localScale = ComputedScale * m_size / 256 * Vector3.one; + } + } +} diff --git a/Assets/Cryville.EEW.Unity/Map/Element/LabeledPointElement.cs.meta b/Assets/Cryville.EEW.Unity/Map/Element/LabeledPointElement.cs.meta new file mode 100644 index 0000000..b22fe40 --- /dev/null +++ b/Assets/Cryville.EEW.Unity/Map/Element/LabeledPointElement.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d10b1601f6b7e8946bdf6c54585167af +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Cryville.EEW.Unity/Map/Element/MapElement.cs b/Assets/Cryville.EEW.Unity/Map/Element/MapElement.cs new file mode 100644 index 0000000..c22bc9c --- /dev/null +++ b/Assets/Cryville.EEW.Unity/Map/Element/MapElement.cs @@ -0,0 +1,39 @@ +using System; +using System.Drawing; +using System.Runtime.CompilerServices; +using UnityEngine; + +namespace Cryville.EEW.Unity.Map.Element { + abstract class MapElement : MonoBehaviour { + public abstract RectangleF? AABB { get; } + + public float MaxScale { get; set; } + float m_scale; + public float Scale { + get => m_scale; + set { + m_scale = value; + OnSetScale(); + } + } + public float ComputedScale => Math.Min(MaxScale, Scale); + protected virtual void OnSetScale() { } + + [SerializeField] + bool m_inheritMaterial = true; + public bool InheritMaterial => m_inheritMaterial; + [SerializeField] + Material m_material; + public Material Material { + get => m_material; + set { + m_material = value; + OnSetMaterial(value); + } + } + protected virtual void OnSetMaterial(Material material) { } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + protected static float OrderToZ(ref int order) => MapElementManager.OrderToZ(order++); + } +} diff --git a/Assets/Cryville.EEW.Unity/Map/Element/MapElement.cs.meta b/Assets/Cryville.EEW.Unity/Map/Element/MapElement.cs.meta new file mode 100644 index 0000000..d76f8a3 --- /dev/null +++ b/Assets/Cryville.EEW.Unity/Map/Element/MapElement.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 92a1fd122e87e6c49b58d9d4c81b131c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Cryville.EEW.Unity/Map/Element/MaskedGroupElement.cs b/Assets/Cryville.EEW.Unity/Map/Element/MaskedGroupElement.cs new file mode 100644 index 0000000..0485d51 --- /dev/null +++ b/Assets/Cryville.EEW.Unity/Map/Element/MaskedGroupElement.cs @@ -0,0 +1,36 @@ +using System.Collections.Generic; +using System.Drawing; +using UnityEngine; + +namespace Cryville.EEW.Unity.Map.Element { + class MaskedGroupElement : GroupElement { + [SerializeField] Material m_maskMaterial; + [SerializeField] PolygonRenderer m_polygonRendererPrefab; + readonly List _polygonRenderers = new(); + + public void SetMasks(IEnumerable>> polygons) { + foreach (var r in _polygonRenderers) { + Destroy(r.gameObject); + } + _polygonRenderers.Clear(); + foreach (var polygon in polygons) { + CreatePolygon(polygon); + } + } + + void CreatePolygon(IEnumerable> polygon) { + var polygonRenderer = Instantiate(m_polygonRendererPrefab); + polygonRenderer.SetPolygon(polygon); + polygonRenderer.Material = m_maskMaterial; + polygonRenderer.transform.SetParent(transform, false); + _polygonRenderers.Add(polygonRenderer); + } + + Transform _container; + protected override Transform Container => _container; + void Awake() { + _container = new GameObject("_container").transform; + _container.SetParent(transform, false); + } + } +} diff --git a/Assets/Cryville.EEW.Unity/Map/Element/MaskedGroupElement.cs.meta b/Assets/Cryville.EEW.Unity/Map/Element/MaskedGroupElement.cs.meta new file mode 100644 index 0000000..b8d7e14 --- /dev/null +++ b/Assets/Cryville.EEW.Unity/Map/Element/MaskedGroupElement.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e597c4b1800db0e47bb84271bcd9de7b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Cryville.EEW.Unity/Map/Element/MultiLineElement.cs b/Assets/Cryville.EEW.Unity/Map/Element/MultiLineElement.cs new file mode 100644 index 0000000..b42ea5b --- /dev/null +++ b/Assets/Cryville.EEW.Unity/Map/Element/MultiLineElement.cs @@ -0,0 +1,70 @@ +using Cryville.EEW.Core.Map; +using System.Collections.Generic; +using System.Drawing; +using UnityEngine; +using Color = UnityEngine.Color; + +namespace Cryville.EEW.Unity.Map.Element { + class MultiLineElement : MapElement { + [SerializeField] LineRenderer m_lineRendererPrefab; + readonly List _lineRenderers = new(); + + RectangleF? m_AABB; + public override RectangleF? AABB => m_AABB; + + [SerializeField] + Color m_color = Color.white; + public Color Color { + get => m_color; + set { + if (m_color == value) return; + m_color = value; + foreach (var r in _lineRenderers) { + r.Color = value; + } + } + } + [SerializeField] + float m_width = 1; + public float Width { + get => m_width; + set { + if (m_width == value) return; + m_width = value; + foreach (var r in _lineRenderers) { + r.Width = value * ComputedScale / 512; + } + } + } + + protected override void OnSetScale() { + foreach (var r in _lineRenderers) { + r.Width = m_width * ComputedScale / 512; + } + } + protected override void OnSetMaterial(Material material) { + foreach (var r in _lineRenderers) { + r.Material = Material; + r.Color = m_color; + } + } + + public void SetLines(IEnumerable> lines, ref int order) { + foreach (var r in _lineRenderers) { + Destroy(r.gameObject); + } + _lineRenderers.Clear(); + m_AABB = null; + foreach (var line in lines) { + CreateLine(line, ref order); + } + } + + void CreateLine(IEnumerable line, ref int order) { + _lineRenderers.Add(LineRenderer.Create(line, OrderToZ(ref order), m_lineRendererPrefab, Material, m_color, m_width, this, out var aabb)); + if (aabb is RectangleF b) { + m_AABB = m_AABB is RectangleF a ? MapTileUtils.UnionTileAABBs(a, b) : b; + } + } + } +} diff --git a/Assets/Cryville.EEW.Unity/Map/Element/MultiLineElement.cs.meta b/Assets/Cryville.EEW.Unity/Map/Element/MultiLineElement.cs.meta new file mode 100644 index 0000000..d705921 --- /dev/null +++ b/Assets/Cryville.EEW.Unity/Map/Element/MultiLineElement.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9028f83972f4b8648819141884011f70 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Cryville.EEW.Unity/Map/Element/MultiPolygonElement.cs b/Assets/Cryville.EEW.Unity/Map/Element/MultiPolygonElement.cs new file mode 100644 index 0000000..6c1490a --- /dev/null +++ b/Assets/Cryville.EEW.Unity/Map/Element/MultiPolygonElement.cs @@ -0,0 +1,102 @@ +using Cryville.EEW.Core.Map; +using System.Collections.Generic; +using System.Drawing; +using UnityEngine; +using Color = UnityEngine.Color; + +namespace Cryville.EEW.Unity.Map.Element { + class MultiPolygonElement : MapElement { + [SerializeField] PolygonRenderer m_polygonRendererPrefab; + readonly List _polygonRenderers = new(); + [SerializeField] LineRenderer m_lineRendererPrefab; + readonly List _lineRenderers = new(); + + RectangleF? m_AABB; + public override RectangleF? AABB => m_AABB; + + [SerializeField] + Color m_fillColor = Color.white; + public Color FillColor { + get => m_fillColor; + set { + if (m_fillColor == value) return; + m_fillColor = value; + foreach (var r in _polygonRenderers) { + r.Color = value; + } + } + } + [SerializeField] + Color m_borderColor = Color.white; + public Color BorderColor { + get => m_borderColor; + set { + if (m_borderColor == value) return; + m_borderColor = value; + foreach (var r in _lineRenderers) { + r.Color = value; + } + } + } + [SerializeField] + float m_borderWidth = 1; + public float BorderWidth { + get => m_borderWidth; + set { + if (m_borderWidth == value) return; + m_borderWidth = value; + foreach (var r in _lineRenderers) { + r.Width = value * ComputedScale / 512; + } + } + } + + protected override void OnSetScale() { + foreach (var r in _lineRenderers) { + r.Width = m_borderWidth * ComputedScale / 512; + } + } + protected override void OnSetMaterial(Material material) { + foreach (var r in _lineRenderers) { + r.Material = Material; + r.Color = m_borderColor; + } + foreach (var r in _polygonRenderers) { + r.Material = Material; + r.Color = m_fillColor; + } + } + + public void SetPolygons(IEnumerable>> polygons, ref int order) { + foreach (var r in _polygonRenderers) { + Destroy(r.gameObject); + } + foreach (var r in _lineRenderers) { + Destroy(r.gameObject); + } + _polygonRenderers.Clear(); + _lineRenderers.Clear(); + m_AABB = null; + foreach (var polygon in polygons) { + CreatePolygon(polygon, ref order); + } + } + + void CreatePolygon(IEnumerable> polygon, ref int order) { + var polygonRenderer = Instantiate(m_polygonRendererPrefab); + polygonRenderer.SetPolygon(polygon); + polygonRenderer.Material = Material; + polygonRenderer.Color = m_fillColor; + polygonRenderer.transform.SetParent(transform, false); + polygonRenderer.transform.localPosition = new(0, 0, OrderToZ(ref order)); + _polygonRenderers.Add(polygonRenderer); + + foreach (var loop in polygon) { + _lineRenderers.Add(LineRenderer.Create(loop, OrderToZ(ref order), m_lineRendererPrefab, Material, m_borderColor, m_borderWidth, this, out var aabb)); + if (aabb is RectangleF b) { + m_AABB = m_AABB is RectangleF a ? MapTileUtils.UnionTileAABBs(a, b) : b; + } + } + } + } +} diff --git a/Assets/Cryville.EEW.Unity/Map/Element/MultiPolygonElement.cs.meta b/Assets/Cryville.EEW.Unity/Map/Element/MultiPolygonElement.cs.meta new file mode 100644 index 0000000..4793be8 --- /dev/null +++ b/Assets/Cryville.EEW.Unity/Map/Element/MultiPolygonElement.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ccf7f796ffe73004a95fef5655177c3b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Cryville.EEW.Unity/Map/Element/OngoingGroupElement.cs b/Assets/Cryville.EEW.Unity/Map/Element/OngoingGroupElement.cs new file mode 100644 index 0000000..d6ca722 --- /dev/null +++ b/Assets/Cryville.EEW.Unity/Map/Element/OngoingGroupElement.cs @@ -0,0 +1,25 @@ +using System; +using UnityEngine; + +namespace Cryville.EEW.Unity.Map.Element { + class OngoingGroupElement : GroupElement { + float _blinkingTime; + float m_blinkingPeriod; + public float BlinkingPeriod { + get => m_blinkingPeriod; + set { + m_blinkingPeriod = value; + _blinkingTime = Math.Max(value - 0.5f, value / 2); + } + } + Transform _container; + protected override Transform Container => _container; + void Awake() { + _container = new GameObject("_container").transform; + _container.SetParent(transform, false); + } + void Update() { + _container.gameObject.SetActive((DateTime.UtcNow - DateTime.UnixEpoch).TotalSeconds % m_blinkingPeriod < _blinkingTime); + } + } +} diff --git a/Assets/Cryville.EEW.Unity/Map/Element/OngoingGroupElement.cs.meta b/Assets/Cryville.EEW.Unity/Map/Element/OngoingGroupElement.cs.meta new file mode 100644 index 0000000..58fe842 --- /dev/null +++ b/Assets/Cryville.EEW.Unity/Map/Element/OngoingGroupElement.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: af28bd1e6223c4e498888034b7b756ff +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Cryville.EEW.Unity/Map/Element/PointElement.cs b/Assets/Cryville.EEW.Unity/Map/Element/PointElement.cs new file mode 100644 index 0000000..bed29f1 --- /dev/null +++ b/Assets/Cryville.EEW.Unity/Map/Element/PointElement.cs @@ -0,0 +1,48 @@ +using Cryville.EEW.Core.Map; +using System.Drawing; +using UnityEngine; +using Color = UnityEngine.Color; + +namespace Cryville.EEW.Unity.Map.Element { + class PointElement : MapElement { + PointF _tilePos; + public override RectangleF? AABB => new(_tilePos, SizeF.Empty); + + public void SetLocation(PointF location, ref int order) { + _tilePos = MapTileUtils.WorldToTilePos(location); + Vector3 pos = _tilePos.ToVector2(); + pos.z = OrderToZ(ref order); + transform.localPosition = pos; + } + + [SerializeField] + Color m_color = Color.white; + public Color Color { + get => m_color; + set { + if (m_color == value) return; + m_color = value; + _spriteRenderer.color = value; + } + } + + float m_size; + public float Size { + get => m_size; + set { + if (m_size == value) return; + m_size = value; + OnSetScale(); + } + } + + SpriteRenderer _spriteRenderer; + void Awake() { + _spriteRenderer = GetComponent(); + } + + protected override void OnSetScale() { + transform.localScale = ComputedScale * m_size / 256 * Vector3.one; + } + } +} diff --git a/Assets/Cryville.EEW.Unity/Map/Element/PointElement.cs.meta b/Assets/Cryville.EEW.Unity/Map/Element/PointElement.cs.meta new file mode 100644 index 0000000..fae027a --- /dev/null +++ b/Assets/Cryville.EEW.Unity/Map/Element/PointElement.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: cccfefde2dac1e742a8c44924b678e12 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Cryville.EEW.Unity/Map/Element/TsunamiHeightElement.cs b/Assets/Cryville.EEW.Unity/Map/Element/TsunamiHeightElement.cs new file mode 100644 index 0000000..a883bdd --- /dev/null +++ b/Assets/Cryville.EEW.Unity/Map/Element/TsunamiHeightElement.cs @@ -0,0 +1,146 @@ +using Cryville.EEW.Core.Map; +using System; +using System.Collections.Generic; +using System.Drawing; +using UnityEngine; +using Color = UnityEngine.Color; + +namespace Cryville.EEW.Unity.Map.Element { + class TsunamiHeightElement : MapElement { + [SerializeField] SpriteRenderer _barRenderer; + [SerializeField] SpriteRenderer _risingMark; + [SerializeField] SpriteRenderer _outOfRangeMark; + [SerializeField] SpriteRenderer _missingMark; + + float _baseBarSize; + + PointF _tilePos; + public override RectangleF? AABB => new(_tilePos, SizeF.Empty); + + public void SetLocation(PointF location, ref int order) { + _tilePos = MapTileUtils.WorldToTilePos(location); + Vector3 pos = _tilePos.ToVector2(); + pos.z = OrderToZ(ref order); + transform.localPosition = pos; + } + + sealed class GlobalHeightScaler { + static GlobalHeightScaler s_instance; + public static GlobalHeightScaler Instance => s_instance ??= new(); + + readonly List _heights = new(); + public void PushHeight(float height) { + var i = _heights.BinarySearch(height); + if (i < 0) i = ~i; + _heights.Insert(i, height); + UpdateMaxHeight(); + } + public void PopHeight(float height) { + var i = _heights.BinarySearch(height); + if (i < 0) return; + _heights.RemoveAt(i); + UpdateMaxHeight(); + } + void UpdateMaxHeight() { + float newMaxHeight = _heights.Count == 0 ? 0 : _heights[^1]; + if (newMaxHeight == MaxHeight) return; + MaxHeight = newMaxHeight; + Update?.Invoke(); + } + public event Action Update; + public float MaxHeight { get; private set; } + } + + float? m_height; + public float Height { + get => m_height.Value; + set { + if (m_height == value) return; + if (m_height != null) GlobalHeightScaler.Instance.PopHeight(m_height.Value); + else GlobalHeightScaler.Instance.Update += UpdateHeight; + m_height = value; + GlobalHeightScaler.Instance.PushHeight(value); + UpdateHeight(); + } + } + void UpdateHeight() { + float h = _baseBarSize * (Math.Max(0, Height) / Math.Max(3, GlobalHeightScaler.Instance.MaxHeight) * 12); + _barRenderer.size = new(_baseBarSize, h + _baseBarSize); + UpdateMarkHeight(_risingMark, h); + UpdateMarkHeight(_outOfRangeMark, h); + } + void UpdateMarkHeight(SpriteRenderer mark, float h) { + mark.transform.localPosition = new(0, _baseBarSize / 2 + mark.size.y / 2 + h); + } + + [SerializeField] + Color m_color = Color.white; + public Color Color { + get => m_color; + set { + if (m_color == value) return; + m_color = value; + _barRenderer.color = value; + _risingMark.color = value; + _outOfRangeMark.color = value; + _missingMark.color = value; + } + } + + bool m_isRising; + public bool IsRising { + get => m_isRising; + set { + if (m_isRising == value) return; + m_isRising = value; + _risingMark.gameObject.SetActive(value); + UpdateHeight(); + } + } + + bool m_isOutOfRange; + public bool IsOutOfRange { + get => m_isOutOfRange; + set { + if (m_isOutOfRange == value) return; + m_isOutOfRange = value; + _outOfRangeMark.gameObject.SetActive(value); + UpdateHeight(); + } + } + + bool m_isMissing; + public bool IsMissing { + get => m_isMissing; + set { + if (m_isMissing == value) return; + m_isMissing = value; + _missingMark.gameObject.SetActive(value); + } + } + + float m_width; + public float Width { + get => m_width; + set { + if (m_width == value) return; + m_width = value; + OnSetScale(); + } + } + + void Awake() { + _baseBarSize = _barRenderer.size.x; + } + void OnDestroy() { + if (m_height != null) { + GlobalHeightScaler.Instance.PopHeight(m_height.Value); + GlobalHeightScaler.Instance.Update -= UpdateHeight; + } + } + + protected override void OnSetScale() { + transform.localScale = ComputedScale * m_width / 256 * Vector3.one; + } + } +} diff --git a/Assets/Cryville.EEW.Unity/Map/Element/TsunamiHeightElement.cs.meta b/Assets/Cryville.EEW.Unity/Map/Element/TsunamiHeightElement.cs.meta new file mode 100644 index 0000000..c0b65f9 --- /dev/null +++ b/Assets/Cryville.EEW.Unity/Map/Element/TsunamiHeightElement.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 00fc5cd64f19b374aba03a10b1fc3d43 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Cryville.EEW.Unity/Map/Element/WaveCircleElement.cs b/Assets/Cryville.EEW.Unity/Map/Element/WaveCircleElement.cs new file mode 100644 index 0000000..07b0157 --- /dev/null +++ b/Assets/Cryville.EEW.Unity/Map/Element/WaveCircleElement.cs @@ -0,0 +1,121 @@ +using Cryville.EEW.Core; +using Cryville.EEW.Core.Map; +using System; +using System.Drawing; +using UnityEngine; + +namespace Cryville.EEW.Unity.Map.Element { + class WaveCircleElement : MapElement { + PointF _hypocenterLocation; + PointF _hypocenterTilePos; + internal void SetHypocenterLocation(PointF value, ref int order) { + _hypocenterLocation = value; + _hypocenterTilePos = MapTileUtils.WorldToTilePos(value); + transform.localPosition = new(0, 0, OrderToZ(ref order)); + } + + public override RectangleF? AABB { + get { + var time = (float)(DateTime.UtcNow - OriginTime).TotalSeconds; + float angle = WaveTimeCalculator.Instance.CalculatePWaveAngleOrPercentage(Depth, time); + if (float.IsNaN(angle)) angle = WaveTimeCalculator.Instance.CalculateSWaveAngleOrPercentage(Depth, time); + if (float.IsNaN(angle)) { + var rTime = (float?)(ReportTime - OriginTime)?.TotalSeconds; + if (rTime != null) { + angle = WaveTimeCalculator.Instance.CalculatePWaveAngleOrPercentage(Depth, rTime.Value); + if (float.IsNaN(angle)) angle = WaveTimeCalculator.Instance.CalculateSWaveAngleOrPercentage(Depth, rTime.Value); + } + } + var inflation = angle > 0 ? angle / 180 : 0; + return RectangleF.Inflate(new(_hypocenterTilePos, SizeF.Empty), inflation, inflation); + } + } + + public DateTime OriginTime { get; set; } + public float Depth { get; set; } + public DateTime? ReportTime { get; set; } + + [SerializeField] MultiLineRenderer m_lineRendererP; + [SerializeField] MultiLineRenderer m_lineRendererS; + [SerializeField] Material m_ongoingMaterial; + [SerializeField] Material m_historyMaterial; + + protected override void OnSetScale() { + m_lineRendererP.Width = ComputedScale / 256; + m_lineRendererS.Width = ComputedScale / 256; + } + + void Update() { + var time = (float)(DateTime.UtcNow - OriginTime).TotalSeconds; + var rTime = (float?)(ReportTime - OriginTime)?.TotalSeconds; + + float pAngle = WaveTimeCalculator.Instance.CalculatePWaveAngleOrPercentage(Depth, time); + if (float.IsNaN(pAngle) && rTime != null) { + DrawCore(WaveTimeCalculator.Instance.CalculatePWaveAngleOrPercentage(Depth, rTime.Value), m_lineRendererP, true); + } + else { + DrawCore(pAngle, m_lineRendererP); + } + + float sAngle = WaveTimeCalculator.Instance.CalculateSWaveAngleOrPercentage(Depth, time); + if (float.IsNaN(sAngle) && rTime != null) { + DrawCore(WaveTimeCalculator.Instance.CalculateSWaveAngleOrPercentage(Depth, rTime.Value), m_lineRendererS, true); + } + else { + DrawCore(sAngle, m_lineRendererS); + } + } + + readonly Vector2[] _vertexBuffer = new Vector2[361]; + void DrawCore(float angle, MultiLineRenderer renderer, bool isHistory = false) { + renderer.Clear(); + if (float.IsNaN(angle)) return; + if (angle < -1) return; + if (angle < 0) { + renderer.Width = ComputedScale / 64; + renderer.TilingScale = 1; + var point = _hypocenterTilePos.ToVector2(); + var offset = ComputedScale / 20; + angle = (angle + 1) * 360; + int segCount = (int)Math.Ceiling(angle); + for (int d = 0; d < segCount - 1; d++) { + float rad = d * Mathf.PI / 180; + _vertexBuffer[d] = point + offset * new Vector2(Mathf.Sin(rad), Mathf.Cos(rad)); + } + float rad2 = angle * Mathf.PI / 180; + if (segCount > 0) _vertexBuffer[segCount - 1] = point + offset * new Vector2(Mathf.Sin(rad2), Mathf.Cos(rad2)); + renderer.AddSegment(_vertexBuffer, 0, segCount); + } + else { + renderer.Width = ComputedScale / 256; + renderer.TilingScale = 8; + float radlat = _hypocenterLocation.Y / 180f * MathF.PI, radlon = _hypocenterLocation.X / 180f * MathF.PI; + float rplat = radlat + angle / 180f * MathF.PI; + Vector3 rp = new(MathF.Cos(radlon) * MathF.Cos(rplat), MathF.Sin(rplat), MathF.Sin(radlon) * MathF.Cos(rplat)); + Vector3 axis = new(MathF.Cos(radlon) * MathF.Cos(radlat), MathF.Sin(radlat), MathF.Sin(radlon) * MathF.Cos(radlat)); + Vector2? lp2 = null; + int segmentIndex = 0; + for (int d = 0; d < 360; d++) { + Quaternion q = Quaternion.AngleAxis(d, axis); + Vector3 p = q * rp; + Vector2 p2 = ToTilePos(p).ToVector2(); + if (lp2 != null) { + float dx = p2.x - lp2.Value.x; + if (MathF.Abs(dx) >= 0.5) { + _vertexBuffer[d] = p2.x < 0.5 ? p2 + new Vector2(1, 0) : p2 - new Vector2(1, 0); + renderer.AddSegment(_vertexBuffer, segmentIndex, d - segmentIndex + 1); + segmentIndex = d; + } + } + _vertexBuffer[d] = p2; + lp2 = p2; + } + Vector2 rp2 = ToTilePos(rp).ToVector2(); + _vertexBuffer[360] = rp2; + renderer.AddSegment(_vertexBuffer, segmentIndex, 361 - segmentIndex); + } + renderer.SetMaterial(isHistory ? m_historyMaterial : m_ongoingMaterial); + } + static PointF ToTilePos(Vector3 p) => MapTileUtils.WorldToTilePos(new(MathF.Atan2(p.z, p.x) / MathF.PI * 180f, MathF.Asin(p.y) / MathF.PI * 180f)); + } +} diff --git a/Assets/Cryville.EEW.Unity/Map/Element/WaveCircleElement.cs.meta b/Assets/Cryville.EEW.Unity/Map/Element/WaveCircleElement.cs.meta new file mode 100644 index 0000000..d8ebf15 --- /dev/null +++ b/Assets/Cryville.EEW.Unity/Map/Element/WaveCircleElement.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c59bd9617c7906543b3b23f07518b4e1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Cryville.EEW.Unity/Map/LineRenderer.cs b/Assets/Cryville.EEW.Unity/Map/LineRenderer.cs new file mode 100644 index 0000000..1fa398e --- /dev/null +++ b/Assets/Cryville.EEW.Unity/Map/LineRenderer.cs @@ -0,0 +1,235 @@ +using Cryville.EEW.Core.Map; +using Cryville.EEW.Unity.Map.Element; +using System; +using System.Buffers; +using System.Collections.Generic; +using System.Drawing; +using System.Linq; +using System.Runtime.CompilerServices; +using UnityEngine; +using Color = UnityEngine.Color; + +namespace Cryville.EEW.Unity.Map { + [RequireComponent(typeof(MeshFilter))] + [RequireComponent(typeof(MeshRenderer))] + class LineRenderer : MonoBehaviour { + public Material Material { + get => _meshRenderer.material; + set { + _meshRenderer.material = value; + _meshRenderer.material.color = m_color; + } + } + + [SerializeField] + Color m_color = Color.white; + public Color Color { + get => m_color; + set { + if (m_color == value) return; + m_color = value; + _meshRenderer.material.color = value; + } + } + + [SerializeField] + float m_width = 1; + public float Width { + get => m_width; + set { + if (m_width == value) return; + m_width = value; + Invalidate(); + } + } + + [SerializeField] + [Range(Vector2.kEpsilon, 1 - Vector2.kEpsilon)] + float m_flatCornerThreshold = 1 - Vector2.kEpsilon; + public float FlatCornerThreshold { + get => m_flatCornerThreshold; + set { + if (m_flatCornerThreshold == value) return; + m_flatCornerThreshold = Mathf.Clamp(value, Vector2.kEpsilon, 1 - Vector2.kEpsilon); + Invalidate(); + } + } + + [SerializeField] + [Range(Vector2.kEpsilon, 1 - Vector2.kEpsilon)] + float m_sharpCornerThreshold = 0.5f; + public float SharpCornerThreshold { + get => m_sharpCornerThreshold; + set { + if (m_sharpCornerThreshold == value) return; + m_sharpCornerThreshold = Mathf.Clamp(value, Vector2.kEpsilon, 1 - Vector2.kEpsilon); + Invalidate(); + } + } + + [SerializeField] + float m_tilingScale = 1; + public float TilingScale { + get => m_tilingScale; + set { + if (m_tilingScale == value) return; + m_tilingScale = value; + Invalidate(); + } + } + + int _positionCount; + Vector2[] _positions; + public void SetPositions(Vector2[] positions) => SetPositions(positions, 0, positions.Length); + public void SetPositions(Vector2[] positions, int index, int length) { + _positionCount = length; + if (_positions is not null) + ArrayPool.Shared.Return(_positions); + _positions = ArrayPool.Shared.Rent(length); + Array.Copy(positions, index, _positions, 0, length); + Invalidate(); + } + + public static LineRenderer Create( + IEnumerable line, float z, + LineRenderer prefab, Material material, Color color, float width, MapElement parent, + out RectangleF? aabb + ) { + var tileLine = line.Select(p => MapTileUtils.WorldToTilePos(p)).ToArray(); + if (tileLine.Length == 0) { + aabb = null; + return null; + } + var lineRenderer = Instantiate(prefab); + lineRenderer.SetPositions(line.Select(p => MapTileUtils.WorldToTilePos(p).ToVector2()).ToArray()); + lineRenderer.Material = material; + lineRenderer.Color = color; + lineRenderer.Width = width * parent.ComputedScale / 512; + lineRenderer.transform.SetParent(parent.transform, false); + lineRenderer.transform.localPosition = new(0, 0, z); + aabb = tileLine.Select(p => new RectangleF(p, SizeF.Empty)).Aggregate((a, b) => MapTileUtils.UnionTileAABBs(a, b)); + return lineRenderer; + } + + bool _valid; + void Invalidate() { + _valid = false; + } + + Mesh _mesh; + MeshFilter _meshFilter; + MeshRenderer _meshRenderer; + void Awake() { + _meshFilter = GetComponent(); + _meshRenderer = GetComponent(); + if (!_meshFilter.mesh) { + _meshFilter.mesh = new(); + } + _mesh = _meshFilter.mesh; + _meshRenderer.material.color = m_color; + } + void OnDestroy() { + if (_positions is not null) + ArrayPool.Shared.Return(_positions); + Destroy(_mesh); + } + void LateUpdate() { + if (_valid) return; + _valid = true; + + _mesh.Clear(); + if (_positions == null) return; + if (_positionCount <= 1) return; + float hw = m_width / 2; + int maxVertexCount = 4 * (_positionCount - 1); + var vbuf = ArrayPool.Shared.Rent(maxVertexCount); + var ubuf = ArrayPool.Shared.Rent(maxVertexCount); + var ibuf = ArrayPool.Shared.Rent(3 * (2 + 4 * (_positionCount - 2))); + + int i, vi = 0, ii = 0, li = 0, ri = 1; + float uvScale = 1 / (m_tilingScale * m_width); + Vector2 p0 = _positions[0], p1 = default; + for (i = 1; i < _positionCount; i++) { + if ((p1 = _positions[i]) != p0) break; + } + if (i >= _positionCount) return; + Vector2 dp0 = NormalizeSmallVector(p1 - p0), np0 = GetNormal(dp0 * hw); + vbuf[vi] = p0 - np0; ubuf[vi++] = new(0, 0); + vbuf[vi] = p0 + np0; ubuf[vi++] = new(0, 1); + float dist = (p1 - p0).magnitude * uvScale; + p0 = p1; + for (i++; i < _positionCount; i++) { + p1 = _positions[i]; + if (p1 == p0) continue; + Vector2 dp1 = NormalizeSmallVector(p1 - p0), np1 = GetNormal(dp1 * hw); + Vector2 dpm = NormalizeSmallVector(dp1 - dp0); + float cc = dp1 == dp0 ? 1 : Mathf.Abs(Vector2.Dot(dpm, NormalizeSmallVector(np0))); + if (cc > m_flatCornerThreshold) { + vbuf[vi] = p0 - np0; ubuf[vi++] = new(dist, 0); + vbuf[vi] = p0 + np0; ubuf[vi++] = new(dist, 0); + ibuf[ii++] = li; ibuf[ii++] = vi - 2; ibuf[ii++] = ri; + ibuf[ii++] = ri; ibuf[ii++] = vi - 2; ibuf[ii++] = vi - 1; + li = vi - 2; ri = vi - 1; + } + else { + if (cc < m_sharpCornerThreshold) { + cc = m_sharpCornerThreshold; + } + float chw = hw / cc; + float cl = Mathf.Sqrt(chw * chw - hw * hw); + float cluv = cl * uvScale; + Vector2 sp0 = p0 - dp0 * cl, sp1 = p0 + dp1 * cl; + bool isRight = Vector3.Cross(dp0, dp1).z < 0; + + if (isRight) { + vbuf[vi] = sp0 - np0; ubuf[vi++] = new(dist - cluv, 0); + vbuf[vi] = p0 + chw * dpm; ubuf[vi++] = new(dist, 1); + } + else { + vbuf[vi] = p0 + chw * dpm; ubuf[vi++] = new(dist, 0); + vbuf[vi] = sp0 + np0; ubuf[vi++] = new(dist - cluv, 1); + } + ibuf[ii++] = li; ibuf[ii++] = vi - 2; ibuf[ii++] = ri; + ibuf[ii++] = ri; ibuf[ii++] = vi - 2; ibuf[ii++] = vi - 1; + + vbuf[vi] = p0 - chw * dpm; ubuf[vi++] = new(dist, isRight ? 0 : 1); + ibuf[ii++] = vi - 3; ibuf[ii++] = vi - 1; ibuf[ii++] = vi - 2; + + if (isRight) { + li = vi; ri = vi - 2; + vbuf[vi] = sp1 - np1; ubuf[vi++] = new(dist + cluv, 0); + } + else { + li = vi - 3; ri = vi; + vbuf[vi] = sp1 + np1; ubuf[vi++] = new(dist + cluv, 1); + } + ibuf[ii++] = vi - 2; ibuf[ii++] = li; ibuf[ii++] = ri; + } + + dist += (p1 - p0).magnitude * uvScale; + p0 = p1; dp0 = dp1; np0 = np1; + } + + vbuf[vi] = p0 - np0; ubuf[vi++] = new(dist, 0); + vbuf[vi] = p0 + np0; ubuf[vi++] = new(dist, 1); + ibuf[ii++] = li; ibuf[ii++] = vi - 2; ibuf[ii++] = ri; + ibuf[ii++] = ri; ibuf[ii++] = vi - 2; ibuf[ii++] = vi - 1; + + _mesh.SetVertices(vbuf, 0, vi); + _mesh.SetUVs(0, ubuf, 0, vi); + _mesh.SetTriangles(ibuf, 0, ii, 0); + _mesh.RecalculateNormals(); + _mesh.RecalculateBounds(); + + ArrayPool.Shared.Return(ibuf); + ArrayPool.Shared.Return(ubuf); + ArrayPool.Shared.Return(vbuf); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + static Vector2 NormalizeSmallVector(Vector2 np0) => np0 / np0.magnitude; + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + static Vector2 GetNormal(Vector2 dp) => new(dp.y, -dp.x); + } +} diff --git a/Assets/Cryville.EEW.Unity/Map/LineRenderer.cs.meta b/Assets/Cryville.EEW.Unity/Map/LineRenderer.cs.meta new file mode 100644 index 0000000..11330e4 --- /dev/null +++ b/Assets/Cryville.EEW.Unity/Map/LineRenderer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 073fe1bdd0645d64eb82329cb69e89fb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Cryville.EEW.Unity/Map/MapElementManager.cs b/Assets/Cryville.EEW.Unity/Map/MapElementManager.cs new file mode 100644 index 0000000..bac0fe7 --- /dev/null +++ b/Assets/Cryville.EEW.Unity/Map/MapElementManager.cs @@ -0,0 +1,224 @@ +using Cryville.EEW.Core; +using Cryville.EEW.Core.Map; +using Cryville.EEW.CWAOpenData.Map; +using Cryville.EEW.GlobalQuake.Map; +using Cryville.EEW.JMAAtom.Map; +using Cryville.EEW.Map; +using Cryville.EEW.Models.GeoJSON; +using Cryville.EEW.NOAA.Map; +using Cryville.EEW.Report; +using Cryville.EEW.Wolfx.Map; +using System.Collections.Generic; +using System.Drawing; +using System.Globalization; +using System.Linq; +using System.Runtime.CompilerServices; +using UnityEngine; +using UnityMapElement = Cryville.EEW.Unity.Map.Element.MapElement; + +namespace Cryville.EEW.Unity.Map { + sealed class MapElementManager : MonoBehaviour { + ReportViewModel _selected; + readonly List _displayingElements = new(); + readonly List _displayingReports = new(); + readonly List _displayingOrder = new(); + + [SerializeField] MapElementManager m_subManager; + + public RectangleF? AABB { + get { + RectangleF? ret = null; + foreach (var element in _displayingElements) { + if (element == null) continue; + if (element.AABB is not RectangleF aabb) continue; + if (ret == null) ret = aabb; // TODO dynamic + else ret = MapTileUtils.UnionTileAABBs(ret.Value, aabb); + } + return ret; + } + } + + public void AddOngoing(ReportViewModel e) => Add(e); + public void RemoveOngoing(ReportViewModel e) => Remove(e); + public void SetSelected(ReportViewModel e) { + if (_selected is not null) + Remove(_selected); + Add(e); + _selected = e; + } + + void Add(ReportViewModel e) { + var element = Build(e.Model, out _, out int order); + if (element == null) return; + var pos = element.transform.localPosition; + pos.z = OrderToZ(_displayingOrder.Sum()); + element.transform.localPosition = pos; + _displayingElements.Add(element); + _displayingReports.Add(e); + _displayingOrder.Add(order); + element.transform.SetParent(transform, false); + if (m_subManager != null) m_subManager.Add(e); + } + void Remove(ReportViewModel e) { + int index = _displayingReports.IndexOf(e); + if (index == -1) return; + _displayingElements.RemoveAt(index); + _displayingReports.RemoveAt(index); + _displayingOrder.RemoveAt(index); + var element = transform.GetChild(index); + element.SetParent(null, false); + Destroy(element.gameObject); + + int order = _displayingOrder.Take(index).Sum(); + for (int i = index; i < transform.childCount; i++) { + var child = transform.GetChild(i); + var pos = child.localPosition; + pos.z = OrderToZ(order); + child.localPosition = pos; + order += _displayingOrder[i]; + } + + if (m_subManager != null) m_subManager.Remove(e); + } + + float m_scale = 1; + public float Scale { + get => m_scale; + set { + m_scale = value; + foreach (Transform element in transform) { + element.GetComponent().Scale = value; + } + if (m_subManager != null) m_subManager.Scale = value; + } + } + + readonly ContextedGeneratorManager _gen = new(new IContextedGenerator[] { + new CENCEarthquakeMapGenerator(), + new CENCEEWMapGenerator(), + new CWAEarthquakeMapGenerator(), + new CWAEEWMapGenerator(), + new CWATsunamiMapGenerator(), + new FujianEEWMapGenerator(), + new GlobalQuakeMapViewGenerator(), + new JMAAtomMapGenerator(), + new JMAEEWMapGenerator(), + new NOAAMapGenerator(), + new SichuanEEWMapGenerator(), + }); + public UnityMapElement Build(object e, out CultureInfo culture, out int order) { + culture = CultureInfo.InvariantCulture; + order = 0; + var ret = Convert(_gen.TryGenerate(e, SharedSettings.Instance, ref culture), ref order); + if (ret == null) + return null; + ret.Scale = Scale; + return ret; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static float OrderToZ(int order) => order / -1000f; + + [SerializeField] Element.GroupElement m_prefabGroupElement; + [SerializeField] Element.MaskedGroupElement m_prefabMaskedGroupElement; + [SerializeField] Element.OngoingGroupElement m_prefabOngoingGroupElement; + [SerializeField] Element.HypocenterElement m_prefabHypocenterElement; + [SerializeField] Element.LabeledPointElement m_prefabLabeledPointElement; + [SerializeField] Element.MultiLineElement m_prefabMultiLineElement; + [SerializeField] Element.MultiPolygonElement m_prefabMultiPolygonElement; + [SerializeField] Element.PointElement m_prefabPointElement; + [SerializeField] Element.TsunamiHeightElement m_prefabTsunamiHeightElement; + [SerializeField] Element.WaveCircleElement m_prefabWaveCircleElement; + public UnityMapElement Convert(MapElement mapElement, ref int order) => mapElement switch { + MaskedGroupElement maskedGroup => ConvertMaskedGroup(maskedGroup, ref order), + OngoingGroupElement ongoingGroup => ConvertOngoingGroup(ongoingGroup, ref order), + GroupElement group => ConvertGroup(group, m_prefabGroupElement, ref order), + HypocenterElement hypocenter => ConvertHypocenter(hypocenter, ref order), + LabeledPointElement labeledPoint => ConvertLabeledPoint(labeledPoint, ref order), + MultiLineElement multiLine => ConvertMultiLine(multiLine, ref order), + MultiPolygonElement multiPolygon => ConvertMultiPolygon(multiPolygon, ref order), + PointElement point => ConvertPoint(point, ref order), + TsunamiHeightElement tsunamiHeight => ConvertTsunamiHeight(tsunamiHeight, ref order), + WaveCircleElement waveCircle => ConvertWaveCircle(waveCircle, ref order), + _ => null, + }; + T Convert(MapElement element, T prefab) where T : UnityMapElement { + var ret = Instantiate(prefab); + ret.MaxScale = element.MaxScale; + return ret; + } + T ConvertGroup(GroupElement group, T prefab, ref int order) where T : Element.GroupElement { + var ret = Convert(group, prefab); + foreach (var e in group.Elements) ret.AddElement(Convert(e, ref order)); + return ret; + } + Element.MaskedGroupElement ConvertMaskedGroup(MaskedGroupElement maskedGroup, ref int order) { + var ret = ConvertGroup(maskedGroup, m_prefabMaskedGroupElement, ref order); + ret.SetMasks(maskedGroup.Masks); + return ret; + } + Element.OngoingGroupElement ConvertOngoingGroup(OngoingGroupElement ongoingGroup, ref int order) { + var ret = ConvertGroup(ongoingGroup, m_prefabOngoingGroupElement, ref order); + ret.BlinkingPeriod = ongoingGroup.BlinkingPeriod; + return ret; + } + Element.HypocenterElement ConvertHypocenter(HypocenterElement hypocenter, ref int order) { + var ret = Convert(hypocenter, m_prefabHypocenterElement); + ret.SetLocation(hypocenter.Location, ref order); + ret.IsLowQuality = hypocenter.IsLowQuality; + ret.Size = hypocenter.Size; + return ret; + } + Element.LabeledPointElement ConvertLabeledPoint(LabeledPointElement labeledPoint, ref int order) { + var ret = Convert(labeledPoint, m_prefabLabeledPointElement); + ret.SetLocation(labeledPoint.Location, ref order); + ret.Text = labeledPoint.Text; + ret.Color = labeledPoint.FillColor.ToUnityColor(); + ret.TextColor = labeledPoint.TextColor.ToUnityColor(); + ret.IsArea = labeledPoint.IsAreaLabel; + ret.Size = labeledPoint.Size; + return ret; + } + Element.MultiLineElement ConvertMultiLine(MultiLineElement multiLine, ref int order) { + var ret = Convert(multiLine, m_prefabMultiLineElement); + ret.SetLines(multiLine.Lines, ref order); + ret.Color = multiLine.BorderColor.ToUnityColor(); + ret.Width = multiLine.StrokeWidth; + return ret; + } + Element.MultiPolygonElement ConvertMultiPolygon(MultiPolygonElement multiPolygon, ref int order) { + var ret = Convert(multiPolygon, m_prefabMultiPolygonElement); + ret.SetPolygons(multiPolygon.Polygons, ref order); + ret.FillColor = multiPolygon.FillColor.ToUnityColor(); + ret.BorderColor = multiPolygon.BorderColor.ToUnityColor(); + ret.BorderWidth = multiPolygon.StrokeWidth; + return ret; + } + Element.PointElement ConvertPoint(PointElement point, ref int order) { + var ret = Convert(point, m_prefabPointElement); + ret.SetLocation(point.Location, ref order); + ret.Color = point.FillColor.ToUnityColor(); + ret.Size = point.Size; + return ret; + } + Element.TsunamiHeightElement ConvertTsunamiHeight(TsunamiHeightElement tsunamiHeight, ref int order) { + var ret = Convert(tsunamiHeight, m_prefabTsunamiHeightElement); + ret.SetLocation(tsunamiHeight.Location, ref order); + ret.Height = tsunamiHeight.Height; + ret.Color = tsunamiHeight.FillColor.ToUnityColor(); + ret.IsRising = tsunamiHeight.IsRising; + ret.IsOutOfRange = tsunamiHeight.IsOutOfRange; + ret.IsMissing = tsunamiHeight.IsMissing; + ret.Width = tsunamiHeight.Width; + return ret; + } + Element.WaveCircleElement ConvertWaveCircle(WaveCircleElement waveCircle, ref int order) { + var ret = Convert(waveCircle, m_prefabWaveCircleElement); + ret.SetHypocenterLocation(waveCircle.HypocenterLocation, ref order); + ret.OriginTime = waveCircle.OriginTime; + ret.Depth = waveCircle.Depth; + ret.ReportTime = waveCircle.ReportTime; + return ret; + } + } +} diff --git a/Assets/Cryville.EEW.Unity/Map/MapElementManager.cs.meta b/Assets/Cryville.EEW.Unity/Map/MapElementManager.cs.meta new file mode 100644 index 0000000..200a5c1 --- /dev/null +++ b/Assets/Cryville.EEW.Unity/Map/MapElementManager.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: dc48b51fb50522e4785fd56204934984 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Cryville.EEW.Unity/Map/MapTile.cs b/Assets/Cryville.EEW.Unity/Map/MapTile.cs new file mode 100644 index 0000000..058cfce --- /dev/null +++ b/Assets/Cryville.EEW.Unity/Map/MapTile.cs @@ -0,0 +1,109 @@ +using Cryville.EEW.Core.Map; +using System; +using System.Diagnostics.CodeAnalysis; +using System.IO; +using System.Net.Http; +using System.Threading; +using System.Threading.Tasks; +using UnityEngine; +using UnityEngine.Networking; + +namespace Cryville.EEW.Unity.Map { + [RequireComponent(typeof(SpriteRenderer))] + sealed class MapTile : MonoBehaviour { + static readonly SemaphoreSlim _semaphore = new(2); + + static readonly HttpClient _httpClient = new() { Timeout = TimeSpan.FromSeconds(10) }; + + public MapTileIndex Index { get; set; } + public bool IsEmpty { get; private set; } + + Action _callback; + + SpriteRenderer _renderer; + + UnityWebRequest _req; + DownloadHandlerTexture _texHandler; + Texture2D _tex; + Sprite _sprite; + + void Awake() { + _renderer = GetComponent(); + } + + FileInfo _localFile; + bool _downloadDone; + public void Load(MapTileIndex index, string cacheDir, Action onUpdated) { + Index = index; + _callback = onUpdated; + _localFile = new(Path.Combine(cacheDir, $"map/{Index.Z}/{Index.NX}/{Index.NY}")); + float z = 1 << index.Z; + transform.localPosition = new(index.X / z, -(index.Y + 1) / z, -index.Z / 100f); + transform.localScale = new Vector3(1 / z, 1 / z); + if (_localFile.Exists) { + _downloadDone = true; + } + else { + Task.Run(() => RunAsync($"https://server.arcgisonline.com/ArcGIS/rest/services/Ocean/World_Ocean_Base/MapServer/tile/{Index.Z}/{Index.NY}/{Index.NX}")); + } + } + async Task RunAsync(string url) { + await _semaphore.WaitAsync().ConfigureAwait(true); + try { + Directory.CreateDirectory(_localFile.DirectoryName); + using var webStream = await _httpClient.GetStreamAsync(new Uri(url)).ConfigureAwait(true); + using var fileStream = new FileStream(_localFile.FullName, FileMode.Create, FileAccess.Write); + await webStream.CopyToAsync(fileStream).ConfigureAwait(true); + } + finally { + _semaphore.Release(); + } + _downloadDone = true; + } + + [SuppressMessage("CodeQuality", "IDE0051", Justification = "Unity message")] + void Update() { + if (_downloadDone) { + try { + _texHandler = new DownloadHandlerTexture(); + _req = new UnityWebRequest($"file:///{_localFile}") { + downloadHandler = _texHandler, + disposeDownloadHandlerOnDispose = true, + }; + _req.SendWebRequest(); + } + catch (Exception ex) { + Debug.LogException(ex); + } + _downloadDone = false; + } + if (_req == null || !_req.isDone) return; + if (_texHandler.isDone) { + _tex = _texHandler.texture; + _tex.wrapMode = TextureWrapMode.Clamp; + _sprite = Sprite.Create(_tex, new Rect(0, 0, _tex.width, _tex.height), Vector2.zero, _tex.height); + _renderer.sprite = _sprite; + } + else { + Debug.LogError(_req.error); + _localFile.Delete(); + IsEmpty = true; + } + _req.Dispose(); + _req = null; + _callback?.Invoke(this); + } + + [SuppressMessage("CodeQuality", "IDE0051", Justification = "Unity message")] + void OnDestroy() { + if (_req != null) { + _req.Abort(); + _req.Dispose(); + } + if (_sprite) Destroy(_sprite); + if (_tex) Destroy(_tex); + IsEmpty = true; + _callback?.Invoke(this); + } + } +} diff --git a/Assets/Cryville.EEW.Unity/Map/MapTile.cs.meta b/Assets/Cryville.EEW.Unity/Map/MapTile.cs.meta new file mode 100644 index 0000000..314dbc7 --- /dev/null +++ b/Assets/Cryville.EEW.Unity/Map/MapTile.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 772f71bcdaaa2504d9e9a469c3100593 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Cryville.EEW.Unity/Map/MapTileCacheManager.cs b/Assets/Cryville.EEW.Unity/Map/MapTileCacheManager.cs new file mode 100644 index 0000000..655e806 --- /dev/null +++ b/Assets/Cryville.EEW.Unity/Map/MapTileCacheManager.cs @@ -0,0 +1,166 @@ +using Cryville.EEW.Core.Map; +using System; +using System.Collections.Generic; +using UnityEngine; + +namespace Cryville.EEW.Unity.Map { + sealed class TileZOrderComparer : IComparer, IComparer { + public static readonly TileZOrderComparer Instance = new(); + public int Compare(MapTileIndex a, MapTileIndex b) { + var c = a.Z.CompareTo(b.Z); + if (c != 0) return c; + c = a.Y.CompareTo(b.Y); + if (c != 0) return c; + return a.X.CompareTo(b.X); + } + public int Compare(MapTile a, MapTile b) { + if (a == null) return b == null ? 0 : -1; + if (b == null) return 1; + return Compare(a.Index, b.Index); + } + } + + sealed class MapTileCacheManager : IDisposable { + public int ExtraCachedZoomLevel { get; set; } = 2; + + GameObject m_prefabTile; + public GameObject PrefabTile { + get => m_prefabTile; + set { + m_prefabTile = value; + if (_dummyTask) GameObject.Destroy(_dummyTask.gameObject); + _dummyTask = GameObject.Instantiate(m_prefabTile, Parent, false).GetComponent(); + } + } + + public Transform Parent { get; set; } + + public string CacheDir { get; set; } + + public event Action Updated; + void OnUpdated(MapTile tile) { + if (tile.IsEmpty) { + lock (ActiveTiles) { + if (_cache.Remove(tile.Index)) { + ActiveTiles.RemoveAt(ActiveTiles.BinarySearch(tile, TileZOrderComparer.Instance)); + } + } + } + Updated?.Invoke(); + } + + public void Dispose() { + MonoBehaviour.Destroy(_dummyTask); + + lock (ActiveTiles) { + foreach (var task in ActiveTiles) + GameObject.Destroy(task.gameObject); + ActiveTiles.Clear(); + _cache.Clear(); + } + } + + readonly Dictionary _cache = new(); + public List ActiveTiles { get; } = new(); + + MapTileIndex _a, _b; + + public void MoveTo(MapTileIndex a, MapTileIndex b) { + if (a.Z != b.Z) throw new ArgumentException("Mismatched Z index."); + if (a.X >= b.X || a.Y >= b.Y) throw new ArgumentException("Incorrect relative X/Y index."); + + lock (ActiveTiles) { + UnloadTiles(a, b); + _a = a; _b = b; + LoadTiles(a, b); + } + } + void LoadTiles(MapTileIndex a, MapTileIndex b) { + for (int z = Math.Max(0, a.Z - ExtraCachedZoomLevel); z <= Math.Max(0, a.Z); z++) { + var ia = a.ZoomToLevel(z, Math.Floor); + var ib = b.ZoomToLevel(z, Math.Ceiling); + for (int x = ia.X; x < ib.X; x++) { + for (int y = ia.Y; y < ib.Y; y++) { + var index = new MapTileIndex(x, y, z); + if (_cache.ContainsKey(index)) continue; + var task = GameObject.Instantiate(PrefabTile, Parent, false).GetComponent(); + task.Load(index, CacheDir, OnUpdated); + _cache.Add(index, task); + var i = ~ActiveTiles.BinarySearch(task, TileZOrderComparer.Instance); + ActiveTiles.Insert(i, task); + } + } + } + } + void UnloadTiles(MapTileIndex a, MapTileIndex b) { + if (a.Z != _a.Z) { + for (int z = _a.Z - ExtraCachedZoomLevel; z < a.Z - ExtraCachedZoomLevel; z++) UnloadTilesAtZoomLevel(z); + for (int z = a.Z + 1; z <= _a.Z; z++) UnloadTilesAtZoomLevel(z); + } + if (a.X > _a.X) { + for (int z = Math.Max(0, a.Z); z >= Math.Max(0, a.Z - ExtraCachedZoomLevel); --z) { + var ia0 = _a.ZoomToLevel(z, Math.Floor); + var ib0 = _b.ZoomToLevel(z, Math.Ceiling); + var ia1 = a.ZoomToLevel(z, Math.Floor); + if (ia0.X == ia1.X) break; + UnloadTilesInRegion(ia0.X, ia0.Y, ia1.X, ib0.Y, z); + } + } + if (b.X < _b.X) { + for (int z = Math.Max(0, a.Z); z >= Math.Max(0, a.Z - ExtraCachedZoomLevel); --z) { + var ia0 = _a.ZoomToLevel(z, Math.Floor); + var ib0 = _b.ZoomToLevel(z, Math.Ceiling); + var ib1 = b.ZoomToLevel(z, Math.Ceiling); + if (ib0.X == ib1.X) break; + UnloadTilesInRegion(ib1.X, ia0.Y, ib0.X, ib0.Y, z); + } + } + if (a.Y > _a.Y) { + for (int z = Math.Max(0, a.Z); z >= Math.Max(0, a.Z - ExtraCachedZoomLevel); --z) { + var ia0 = _a.ZoomToLevel(z, Math.Floor); + var ib0 = _b.ZoomToLevel(z, Math.Ceiling); + var ia1 = a.ZoomToLevel(z, Math.Floor); + if (ia0.Y == ia1.Y) break; + UnloadTilesInRegion(ia0.X, ia0.Y, ib0.X, ia1.Y, z); + } + } + if (b.Y < _b.Y) { + for (int z = Math.Max(0, a.Z); z >= Math.Max(0, a.Z - ExtraCachedZoomLevel); --z) { + var ia0 = _a.ZoomToLevel(z, Math.Floor); + var ib0 = _b.ZoomToLevel(z, Math.Ceiling); + var ib1 = b.ZoomToLevel(z, Math.Ceiling); + if (ib0.Y == ib1.Y) break; + UnloadTilesInRegion(ia0.X, ib1.Y, ib0.X, ib0.Y, z); + } + } + } + void UnloadTilesInRegion(int x1, int y1, int x2, int y2, int z) { + for (int x = x1; x < x2; x++) { + for (int y = y1; y < y2; y++) { + var index = new MapTileIndex(x, y, z); + if (!_cache.TryGetValue(index, out var task)) continue; + GameObject.Destroy(task.gameObject); + } + } + } + + MapTile _dummyTask; + void UnloadTilesAtZoomLevel(int z) { + if (z < 0) return; + + _dummyTask.Index = new(int.MinValue, int.MinValue, z); + var i0 = ActiveTiles.BinarySearch(_dummyTask, TileZOrderComparer.Instance); + if (i0 < 0) i0 = ~i0; + + _dummyTask.Index = new(int.MinValue, int.MinValue, z + 1); + var i1 = ActiveTiles.BinarySearch(_dummyTask, TileZOrderComparer.Instance); + if (i1 < 0) i1 = ~i1; + + for (var i = i1 - 1; i >= i0; --i) { + var index = ActiveTiles[i].Index; + if (!_cache.TryGetValue(index, out var task)) continue; + GameObject.Destroy(task.gameObject); + } + } + } +} diff --git a/Assets/Cryville.EEW.Unity/Map/MapTileCacheManager.cs.meta b/Assets/Cryville.EEW.Unity/Map/MapTileCacheManager.cs.meta new file mode 100644 index 0000000..8c8e4d3 --- /dev/null +++ b/Assets/Cryville.EEW.Unity/Map/MapTileCacheManager.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: db3aee38f4dfa62429bbe7025fd6c422 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Cryville.EEW.Unity/Map/MultiLineRenderer.cs b/Assets/Cryville.EEW.Unity/Map/MultiLineRenderer.cs new file mode 100644 index 0000000..9b8326b --- /dev/null +++ b/Assets/Cryville.EEW.Unity/Map/MultiLineRenderer.cs @@ -0,0 +1,70 @@ +using System.Collections.Generic; +using UnityEngine; + +namespace Cryville.EEW.Unity.Map { + class MultiLineRenderer : MonoBehaviour { + [SerializeField] + LineRenderer m_lineRendererPrefab; + public LineRenderer LineRenderer { + get => m_lineRendererPrefab; + set { + if (m_lineRendererPrefab == value) return; + m_lineRendererPrefab = value; + } + } + + [SerializeField] + float m_width = 1; + public float Width { + get => m_width; + set { + if (m_width == value) return; + m_width = value; + for (int i = 0; i < _segmentIndex; i++) { + _segments[i].Width = value; + } + } + } + + [SerializeField] + float m_tilingScale = 1; + public float TilingScale { + get => m_tilingScale; + set { + if (m_tilingScale == value) return; + m_tilingScale = value; + for (int i = 0; i < _segmentIndex; i++) { + _segments[i].TilingScale = value; + } + } + } + + int _segmentIndex; + readonly List _segments = new(); + public void AddSegment(Vector2[] positions) => AddSegment(positions, 0, positions.Length); + public void AddSegment(Vector2[] positions, int index, int length) { + LineRenderer segment; + if (_segmentIndex >= _segments.Count) { + _segments.Add(segment = Instantiate(m_lineRendererPrefab, transform, false).GetComponent()); + } + else { + segment = _segments[_segmentIndex++]; + segment.gameObject.SetActive(true); + } + segment.SetPositions(positions, index, length); + segment.Width = m_width; + } + public void Clear() { + for (int i = 0; i < _segmentIndex; i++) { + _segments[i].gameObject.SetActive(false); + } + _segmentIndex = 0; + } + + public void SetMaterial(Material material) { + foreach (var r in _segments) { + r.Material = material; + } + } + } +} diff --git a/Assets/Cryville.EEW.Unity/Map/MultiLineRenderer.cs.meta b/Assets/Cryville.EEW.Unity/Map/MultiLineRenderer.cs.meta new file mode 100644 index 0000000..d0e09fe --- /dev/null +++ b/Assets/Cryville.EEW.Unity/Map/MultiLineRenderer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3c4b9fd0d7969a94bae8539e2db32009 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Cryville.EEW.Unity/Map/PolygonRenderer.cs b/Assets/Cryville.EEW.Unity/Map/PolygonRenderer.cs new file mode 100644 index 0000000..43a17ff --- /dev/null +++ b/Assets/Cryville.EEW.Unity/Map/PolygonRenderer.cs @@ -0,0 +1,93 @@ +using Cryville.EEW.Core.Map; +using Poly2Tri; +using System.Buffers; +using System.Collections.Generic; +using System.Drawing; +using System.Linq; +using UnityEngine; +using Color = UnityEngine.Color; + +namespace Cryville.EEW.Unity.Map { + [RequireComponent(typeof(MeshFilter))] + [RequireComponent(typeof(MeshRenderer))] + class PolygonRenderer : MonoBehaviour { + public Material Material { + get => _meshRenderer.material; + set { + _meshRenderer.material = value; + _meshRenderer.material.color = m_color; + } + } + + [SerializeField] + Color m_color = Color.white; + public Color Color { + get => m_color; + set { + if (m_color == value) return; + m_color = value; + _meshRenderer.material.color = value; + } + } + + Mesh _mesh; + MeshFilter _meshFilter; + MeshRenderer _meshRenderer; + void Awake() { + _meshFilter = GetComponent(); + _meshRenderer = GetComponent(); + if (!_meshFilter.mesh) { + _meshFilter.mesh = new(); + } + _mesh = _meshFilter.mesh; + _meshRenderer.material.color = m_color; + } + void OnDestroy() { + Destroy(_mesh); + } + public void SetPolygon(IEnumerable> polygon) { + _mesh.Clear(); + + Polygon convertedPolygon = null; + foreach (var loop in polygon) { + var convertedLoop = new Polygon(loop.Select(p => { + var v = MapTileUtils.WorldToTilePos(p).ToVector2(); + return new PolygonPoint(v.x, v.y); + })); + if (convertedPolygon is null) { + convertedPolygon = convertedLoop; + } + else { + convertedPolygon.AddHole(convertedLoop); + } + } + + var tcx = new DTSweepContext(); + tcx.PrepareTriangulation(convertedPolygon); + DTSweep.Triangulate(tcx); + + var codeToIndex = new Dictionary(); + var vertices = ArrayPool.Shared.Rent(convertedPolygon.Points.Count); + var triangles = ArrayPool.Shared.Rent(convertedPolygon.Triangles.Count * 3); + int vi = 0, ii = 0; + foreach (var tri in convertedPolygon.Triangles) { + for (int i = 2; i >= 0; --i) { + var p = tri.Points[i]; + if (!codeToIndex.TryGetValue(p.VertexCode, out int index)) { + codeToIndex.Add(p.VertexCode, index = vi++); + vertices[index] = new(p.Xf, p.Yf); + } + triangles[ii++] = index; + } + } + + _mesh.SetVertices(vertices, 0, vi); + _mesh.SetTriangles(triangles, 0, ii, 0); + _mesh.RecalculateNormals(); + _mesh.RecalculateBounds(); + + ArrayPool.Shared.Return(triangles); + ArrayPool.Shared.Return(vertices); + } + } +} diff --git a/Assets/Cryville.EEW.Unity/Map/PolygonRenderer.cs.meta b/Assets/Cryville.EEW.Unity/Map/PolygonRenderer.cs.meta new file mode 100644 index 0000000..4495b6c --- /dev/null +++ b/Assets/Cryville.EEW.Unity/Map/PolygonRenderer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: cd4f627f0b43de845b20ffb1d668f14c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Cryville.EEW.Unity/Map/VectorExtensions.cs b/Assets/Cryville.EEW.Unity/Map/VectorExtensions.cs new file mode 100644 index 0000000..39bb96e --- /dev/null +++ b/Assets/Cryville.EEW.Unity/Map/VectorExtensions.cs @@ -0,0 +1,8 @@ +using System.Drawing; +using UnityEngine; + +namespace Cryville.EEW.Unity.Map { + static class VectorExtensions { + public static Vector2 ToVector2(this PointF point) => new(point.X, -point.Y); + } +} diff --git a/Assets/Cryville.EEW.Unity/Map/VectorExtensions.cs.meta b/Assets/Cryville.EEW.Unity/Map/VectorExtensions.cs.meta new file mode 100644 index 0000000..4b8395e --- /dev/null +++ b/Assets/Cryville.EEW.Unity/Map/VectorExtensions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3914c07b14665e94aa3900b890884804 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Cryville.EEW.Unity/PlatformConfig.cs b/Assets/Cryville.EEW.Unity/PlatformConfig.cs new file mode 100644 index 0000000..75fc3f9 --- /dev/null +++ b/Assets/Cryville.EEW.Unity/PlatformConfig.cs @@ -0,0 +1,27 @@ +using Cryville.Common.Font; +using System.Collections.Generic; + +namespace Cryville.Crtr { + internal static class PlatformConfig { +#if UNITY_STANDALONE_WIN + public static readonly string Name = "windows"; +#elif UNITY_ANDROID + public static readonly string Name = "android"; +#else +#error Unknown platform. +#endif +#if UNITY_STANDALONE_WIN || UNITY_EDITOR_WIN + public static readonly string FileProtocolPrefix = "file:///"; + public static readonly FontManager FontManager = new FontManagerWindows(); + public static Dictionary> ScriptFontMap => FallbackListFontMatcher.GetDefaultWindowsFallbackMap(); + public static readonly string TextShader = "TextMesh Pro/Shaders/TMP_SDF SSD"; +#elif UNITY_ANDROID + public static readonly string FileProtocolPrefix = "file://"; + public static readonly FontManager FontManager = new FontManagerAndroid(); + public static Dictionary> ScriptFontMap => FallbackListFontMatcher.GetDefaultAndroidFallbackMap(); + public static readonly string TextShader = "TextMesh Pro/Shaders/TMP_SDF-Mobile SSD"; +#else +#error Unknown platform. +#endif + } +} diff --git a/Assets/Cryville.EEW.Unity/PlatformConfig.cs.meta b/Assets/Cryville.EEW.Unity/PlatformConfig.cs.meta new file mode 100644 index 0000000..c52f294 --- /dev/null +++ b/Assets/Cryville.EEW.Unity/PlatformConfig.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c9a3ab42c572cf44b84b595592563f91 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Cryville.EEW.Unity/SharedSettings.cs b/Assets/Cryville.EEW.Unity/SharedSettings.cs new file mode 100644 index 0000000..e163375 --- /dev/null +++ b/Assets/Cryville.EEW.Unity/SharedSettings.cs @@ -0,0 +1,24 @@ +using Cryville.EEW.Colors; +using Cryville.EEW.Core.Colors; +using Cryville.EEW.FERegion; +using Cryville.EEW.Map; +using Cryville.EEW.Report; +using Cryville.EEW.TTS; +using System; +using System.Drawing; + +namespace Cryville.EEW.Unity { + sealed class SharedSettings : IRVMGeneratorContext, IMapGeneratorContext, ITTSMessageGeneratorContext { + static SharedSettings s_instance; + public static SharedSettings Instance => s_instance ??= new(); + + public ISeverityScheme SeverityScheme => DefaultSeverityScheme.Instance; + public ISeverityColorMapping SeverityColorMapping => DefaultSeverityColorMapping.Instance; + public bool UseContinuousColor => true; + public IColorScheme ColorScheme => new SeverityBasedColorScheme(SeverityScheme, DefaultSeverityColorMapping.Instance); + public ISubColorScheme BorderColorScheme => new WrappedColorScheme(new SeverityBasedColorScheme(SeverityScheme, DefaultSeverityColorMapping.SecondaryInstance)); + public ISubColorScheme TextColorScheme => new DefaultTextColorScheme(Color.White, Color.Black); + public ILocationConverter LocationConverter => new FERegionLongConverter(); + public TimeSpan NowcastWarningDelayTolerance => TimeSpan.MaxValue; + } +} diff --git a/Assets/Cryville.EEW.Unity/SharedSettings.cs.meta b/Assets/Cryville.EEW.Unity/SharedSettings.cs.meta new file mode 100644 index 0000000..273e6bb --- /dev/null +++ b/Assets/Cryville.EEW.Unity/SharedSettings.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ee62d4ae7a6870e49a0dfc662c3c2d41 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Cryville.EEW.Unity/SoundPlayer.cs b/Assets/Cryville.EEW.Unity/SoundPlayer.cs new file mode 100644 index 0000000..5156931 --- /dev/null +++ b/Assets/Cryville.EEW.Unity/SoundPlayer.cs @@ -0,0 +1,21 @@ +using Cryville.Audio; +using System; +using System.Collections.Generic; +using System.IO; +using UnityEngine; + +namespace Cryville.EEW.Unity { + class SoundPlayer : Core.SoundPlayer { + public SoundPlayer() : base(GetEngineList(), AudioUsage.NotificationEvent) { } + static List GetEngineList() => new() { + typeof(Audio.Wasapi.MMDeviceEnumeratorWrapper), + typeof(Audio.WaveformAudio.WaveDeviceManager) + }; + + protected override Stream Open(string path) { + path = Path.Combine(Application.streamingAssetsPath, "Sounds", path + ".ogg"); + if (!File.Exists(path)) return null; + return new FileStream(path, FileMode.Open, FileAccess.Read); + } + } +} diff --git a/Assets/Cryville.EEW.Unity/SoundPlayer.cs.meta b/Assets/Cryville.EEW.Unity/SoundPlayer.cs.meta new file mode 100644 index 0000000..9f4f04e --- /dev/null +++ b/Assets/Cryville.EEW.Unity/SoundPlayer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2a8a590d8e5b3e1468fe2a0f828625ff +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Cryville.EEW.Unity/TTSWorker.cs b/Assets/Cryville.EEW.Unity/TTSWorker.cs new file mode 100644 index 0000000..2b4e24c --- /dev/null +++ b/Assets/Cryville.EEW.Unity/TTSWorker.cs @@ -0,0 +1,25 @@ +using System; +using System.Globalization; +using System.Threading; +using System.Threading.Tasks; + +namespace Cryville.EEW.Unity { + class TTSWorker : Core.TTSWorker { + public TTSWorker() : base(CreateSoundPlayer()) { } + + static SoundPlayer CreateSoundPlayer() { + try { + return new SoundPlayer(); + } + catch (InvalidOperationException) { + return null; + } + } + + protected override bool IsSpeaking() => false; + + protected override Task Speak(CultureInfo culture, string content, CancellationToken cancellationToken) => Task.CompletedTask; + + protected override void StopCurrent() { } + } +} diff --git a/Assets/Cryville.EEW.Unity/TTSWorker.cs.meta b/Assets/Cryville.EEW.Unity/TTSWorker.cs.meta new file mode 100644 index 0000000..88db8af --- /dev/null +++ b/Assets/Cryville.EEW.Unity/TTSWorker.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 76bc2768990085a4ca7f75326d524099 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Cryville.EEW.Unity/UI.meta b/Assets/Cryville.EEW.Unity/UI.meta new file mode 100644 index 0000000..72a6b7e --- /dev/null +++ b/Assets/Cryville.EEW.Unity/UI.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b32a77c17e1945a499006419dae05258 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Cryville.EEW.Unity/UI/EventBaseView.cs b/Assets/Cryville.EEW.Unity/UI/EventBaseView.cs new file mode 100644 index 0000000..e41b063 --- /dev/null +++ b/Assets/Cryville.EEW.Unity/UI/EventBaseView.cs @@ -0,0 +1,84 @@ +using Cryville.Common.Unity.UI; +using Cryville.EEW.Colors; +using Cryville.EEW.Report; +using System; +using System.Collections.Generic; +using System.Globalization; +using UnityEngine; +using UnityEngine.UI; + +namespace Cryville.EEW.Unity.UI { + abstract class EventBaseView : MonoBehaviour { + [SerializeField] Image[] m_reportView; + + [SerializeField] Image m_keyView; + [SerializeField] TMPLocalizedText m_keyTitleView; + [SerializeField] TMPLocalizedText m_keyValueView; + [SerializeField] TMPLocalizedText m_keyConditionView; + + [SerializeField] TMPLocalizedText m_locationView; + [SerializeField] TMPLocalizedText m_predicateView; + [SerializeField] TMPLocalizedText m_timeView; + [SerializeField] EventPropertyListView m_propertyListView; + + protected virtual bool UseShortTimeFormat => false; + void SetSeverity(float severity, out IColor color) { + color = SharedSettings.Instance.SeverityColorMapping.From(severity); + SetMainColor(color.ToSrgb().ToUnityColor()); + } + protected void SetMainColor(Color color, Image image) { + image.color = color; + } + protected virtual void SetMainColor(Color color) { + foreach (var view in m_reportView) + SetMainColor(color, view); + m_keyView.color = color; + } + protected virtual void SetView(float mainSeverity, Localized location, Localized predicate, Localized time, TimeZoneInfo timeZone, Localized keyProp, IEnumerable> props) { + SetSeverity(mainSeverity, out var mainColor); + SetText(m_locationView, location.Value, location.Culture); + SetText(m_predicateView, predicate.Value, predicate.Culture); + if (time.Value is DateTime ttime) { + // TODO + //if (SharedSettings.Instance.OverrideTimeZone is TimeZoneInfo tTimeZone) + // ttime = TimeZoneInfo.ConvertTime(ttime, timeZone, tTimeZone); + //else + // tTimeZone = timeZone; + TimeZoneInfo tTimeZone = timeZone; + if (UseShortTimeFormat) { + SetText(m_timeView, ttime.ToString("G", time.Culture), time.Culture); + } + else { + // TODO SetText(m_timeView, SharedSettings.Instance.DoDisplayTimeZone ? string.Format(time.Culture, "{0:G} ({1})", ttime, tTimeZone.ToTimeZoneString()) : ttime.ToString(time.Culture), time.Culture); + SetText(m_timeView, string.Format(time.Culture, "{0:G} ({1})", ttime, tTimeZone.ToTimeZoneString()), time.Culture); + } + } + else { + SetText(m_timeView, null, time.Culture); + } + if (keyProp.Value != null) { + m_keyView.gameObject.SetActive(true); + Color color = SharedSettings.Instance.TextColorScheme.From("Severity", mainSeverity, mainColor).ToSrgb().ToUnityColor(); + m_keyTitleView.Text.color = color; + m_keyValueView.Text.color = color; + m_keyConditionView.Text.color = color; + SetText(m_keyTitleView, keyProp.Value.Key, keyProp.Culture); + SetText(m_keyValueView, keyProp.Value.Value, keyProp.Culture); + SetText(m_keyConditionView, keyProp.Value.Condition, keyProp.Culture); + } + else { + m_keyView.gameObject.SetActive(false); + } + m_propertyListView.Set(props); + } + + protected static void SetText(TMPLocalizedText view, string text, CultureInfo culture) { + if (string.IsNullOrWhiteSpace(text)) { + view.gameObject.SetActive(false); + return; + } + view.gameObject.SetActive(true); + view.SetText(text, culture); + } + } +} diff --git a/Assets/Cryville.EEW.Unity/UI/EventBaseView.cs.meta b/Assets/Cryville.EEW.Unity/UI/EventBaseView.cs.meta new file mode 100644 index 0000000..f8a55b4 --- /dev/null +++ b/Assets/Cryville.EEW.Unity/UI/EventBaseView.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1ca3ce085c716d6449523bae22295880 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Cryville.EEW.Unity/UI/EventGroupListView.cs b/Assets/Cryville.EEW.Unity/UI/EventGroupListView.cs new file mode 100644 index 0000000..fcdb709 --- /dev/null +++ b/Assets/Cryville.EEW.Unity/UI/EventGroupListView.cs @@ -0,0 +1,35 @@ +using Cryville.EEW.Core; +using System.Collections.Generic; +using UnityEngine; + +namespace Cryville.EEW.Unity.UI { + class EventGroupListView : MonoBehaviour { + [SerializeField] + EventGroupView m_prefabEventGroupView; + + readonly List _groups = new(); + public void UpdateGroup(ReportGroup e) { + Remove(e); + Add(e); + } + public void RemoveGroup(ReportGroup e) { + Remove(e); + } + void Add(ReportGroup group) { + _groups.Add(group); + var child = Instantiate(m_prefabEventGroupView); + child.Set(group); + child.transform.SetParent(transform, false); + child.transform.SetSiblingIndex(0); + } + void Remove(ReportGroup group) { + int index = _groups.LastIndexOf(group); + if (index == -1) return; + _groups.RemoveAt(index); + + var child = transform.GetChild(_groups.Count - index); + child.SetParent(null, false); + Destroy(child.gameObject); + } + } +} diff --git a/Assets/Cryville.EEW.Unity/UI/EventGroupListView.cs.meta b/Assets/Cryville.EEW.Unity/UI/EventGroupListView.cs.meta new file mode 100644 index 0000000..23483a4 --- /dev/null +++ b/Assets/Cryville.EEW.Unity/UI/EventGroupListView.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2426bd244f51fed429d955beee52e91d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Cryville.EEW.Unity/UI/EventGroupView.cs b/Assets/Cryville.EEW.Unity/UI/EventGroupView.cs new file mode 100644 index 0000000..eaad844 --- /dev/null +++ b/Assets/Cryville.EEW.Unity/UI/EventGroupView.cs @@ -0,0 +1,77 @@ +using Cryville.EEW.Core; +using Cryville.EEW.Report; +using System.Linq; +using System; +using UnityEngine; +using UnityEngine.UI; + +namespace Cryville.EEW.Unity.UI { + class EventGroupView : EventBaseView { + [SerializeField] EventUnitListView m_listView; + + [SerializeField] Button m_groupHeader; + [SerializeField] GameObject m_listViewContainer; + [SerializeField] GameObject m_listViewRail; + [SerializeField] GameObject m_expander; + + void Start() { + m_groupHeader.onClick.AddListener(OnGroupHeaderClicked); + } + void OnGroupHeaderClicked() { + SetExpanded(!m_listViewContainer.gameObject.activeSelf); + } + void SetExpanded(bool expanded) { + m_listViewContainer.gameObject.SetActive(expanded); + m_expander.SetActive(!expanded); + } + + public void Set(ReportGroup group) { + int reportCount; + ReportViewModel[] latestValidReports; + DateTime latestActiveTime; + lock (group) { + m_listView.Set(group); + // TODO _expanderContainer.Activated = false; + + reportCount = group.Count; + latestValidReports = group.Where(u => !u.IsCanceled).Select(u => u.LatestReport).Reverse().ToArray(); + latestActiveTime = group.Max(u => u.LatestActiveTime); + } + var mainLocationReport = latestValidReports.OrderByDescending(e => e.LocationSpecificity).FirstOrDefault(); + var mainTimeReport = mainLocationReport?.Time != null ? mainLocationReport : latestValidReports.LastOrDefault(e => e.Time != null); + var props = latestValidReports + .SelectMany(e => e.Properties.Select(p => new Localized(p, e.Culture))) + .GroupBy(p => p.Value.Type) + .Select(g => g.OrderBy(p => p.Value, DefaultRVMPropertyInnerComparer.Instance).First()) + .ToArray(); + var accuracyOrderThreshold = props.Length == 0 ? int.MaxValue : props.Min(p => p.Value.AccuracyOrder) switch { + < 40 => 40, + _ => int.MaxValue, + }; + props = props + .OrderBy(p => p.Value, DefaultRVMPropertyOuterComparer.Instance) + .Where(p => p.Value.AccuracyOrder < accuracyOrderThreshold && DefaultRVMPropertyOuterComparer.Instance.ShouldDisplayInGroup(p.Value)) + .ToArray(); + + SetView( + props.FirstOrDefault().Value?.Severity ?? -1, + new Localized(mainLocationReport?.Location, mainLocationReport?.Culture), + new Localized(mainLocationReport?.Predicate, mainLocationReport?.Culture), + new Localized(mainTimeReport?.Time, mainTimeReport?.Culture), mainTimeReport?.TimeZone, + props.FirstOrDefault(), + props.Skip(1) + ); + + if (mainLocationReport?.Location == null || reportCount <= 1) { + SetExpanded(true); + m_listViewRail.SetActive(false); + m_groupHeader.gameObject.SetActive(false); + } + else { + SetExpanded(DateTime.UtcNow - latestActiveTime < TimeSpan.FromMinutes(5)); + m_listViewRail.SetActive(true); + m_groupHeader.gameObject.SetActive(true); + } + } + } +} diff --git a/Assets/Cryville.EEW.Unity/UI/EventGroupView.cs.meta b/Assets/Cryville.EEW.Unity/UI/EventGroupView.cs.meta new file mode 100644 index 0000000..a61aefd --- /dev/null +++ b/Assets/Cryville.EEW.Unity/UI/EventGroupView.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2e6468ba458d7f44c84b64a0a12dd06f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Cryville.EEW.Unity/UI/EventListView.cs b/Assets/Cryville.EEW.Unity/UI/EventListView.cs new file mode 100644 index 0000000..233c3ab --- /dev/null +++ b/Assets/Cryville.EEW.Unity/UI/EventListView.cs @@ -0,0 +1,26 @@ +using Cryville.EEW.Core; +using Cryville.EEW.Report; +using UnityEngine; + +namespace Cryville.EEW.Unity.UI { + class EventListView : MonoBehaviour { + [SerializeField] + EventView m_prefabEventView; + + public void Set(ReportUnit unit) { + foreach (Transform child in transform) { + child.SetParent(null, false); + Destroy(child.gameObject); + } + foreach (var e in unit) { + Add(e); + } + } + void Add(ReportViewModel e) { + var child = Instantiate(m_prefabEventView); + child.Set(e); + child.transform.SetParent(transform, false); + child.transform.SetSiblingIndex(0); + } + } +} diff --git a/Assets/Cryville.EEW.Unity/UI/EventListView.cs.meta b/Assets/Cryville.EEW.Unity/UI/EventListView.cs.meta new file mode 100644 index 0000000..02666fc --- /dev/null +++ b/Assets/Cryville.EEW.Unity/UI/EventListView.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 11a3f253a932b1e4ebe0c7bdad12b3bf +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Cryville.EEW.Unity/UI/EventPropertyListView.cs b/Assets/Cryville.EEW.Unity/UI/EventPropertyListView.cs new file mode 100644 index 0000000..df390b8 --- /dev/null +++ b/Assets/Cryville.EEW.Unity/UI/EventPropertyListView.cs @@ -0,0 +1,25 @@ +using Cryville.EEW.Report; +using System.Collections.Generic; +using UnityEngine; + +namespace Cryville.EEW.Unity.UI { + class EventPropertyListView : MonoBehaviour { + [SerializeField] + EventPropertyView m_prefabEventPropertyView; + + public void Set(IEnumerable> props) { + foreach (Transform child in transform) { + child.SetParent(null, false); + Destroy(child.gameObject); + } + foreach (var prop in props) { + Add(prop); + } + } + void Add(Localized prop) { + var child = Instantiate(m_prefabEventPropertyView); + child.Set(prop); + child.transform.SetParent(transform, false); + } + } +} diff --git a/Assets/Cryville.EEW.Unity/UI/EventPropertyListView.cs.meta b/Assets/Cryville.EEW.Unity/UI/EventPropertyListView.cs.meta new file mode 100644 index 0000000..9d0024e --- /dev/null +++ b/Assets/Cryville.EEW.Unity/UI/EventPropertyListView.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 22019c55ede3c4245b1934a9a2d4a06b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Cryville.EEW.Unity/UI/EventPropertyView.cs b/Assets/Cryville.EEW.Unity/UI/EventPropertyView.cs new file mode 100644 index 0000000..a571402 --- /dev/null +++ b/Assets/Cryville.EEW.Unity/UI/EventPropertyView.cs @@ -0,0 +1,17 @@ +using Cryville.Common.Unity.UI; +using Cryville.EEW.Report; +using UnityEngine; + +namespace Cryville.EEW.Unity.UI { + class EventPropertyView : MonoBehaviour { + [SerializeField] TMPLocalizedText m_text; + + public void Set(Localized prop) { + var culture = prop.Culture; + var p = prop.Value; + var s = string.IsNullOrWhiteSpace(p.Key) ? p.Value : string.Format(culture, "{0} {1}", p.Key, p.Value); + if (!string.IsNullOrWhiteSpace(p.Condition)) s = string.Format(culture, "{0} {1}", s, p.Condition); + m_text.SetText(s, culture); + } + } +} diff --git a/Assets/Cryville.EEW.Unity/UI/EventPropertyView.cs.meta b/Assets/Cryville.EEW.Unity/UI/EventPropertyView.cs.meta new file mode 100644 index 0000000..3236741 --- /dev/null +++ b/Assets/Cryville.EEW.Unity/UI/EventPropertyView.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d1b90ac529732a34e97c569ec13f5756 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Cryville.EEW.Unity/UI/EventReportView.cs b/Assets/Cryville.EEW.Unity/UI/EventReportView.cs new file mode 100644 index 0000000..dd2e087 --- /dev/null +++ b/Assets/Cryville.EEW.Unity/UI/EventReportView.cs @@ -0,0 +1,63 @@ +using Cryville.Common.Unity.UI; +using Cryville.EEW.Core; +using Cryville.EEW.Report; +using System; +using System.Linq; +using UnityEngine; +using UnityEngine.UI; + +namespace Cryville.EEW.Unity.UI { + class EventReportView : EventBaseView { + [SerializeField] Button m_reportViewButton; + [SerializeField] TMPLocalizedText m_titleView; + [SerializeField] GameObject m_revisionViewContainer; + [SerializeField] TMPLocalizedText m_revisionView; + ReportViewModel _viewModel; + + protected virtual void Start() { + m_reportViewButton.onClick.AddListener(OnViewClicked); + } + void OnViewClicked() { + Worker.Instance.SetSelected(_viewModel); + } + public virtual void SetViewModel(ReportViewModel viewModel, bool hideRevision = false) { + _viewModel = viewModel; + + if (m_titleView != null) { + var title = viewModel.Title ?? ""; + if (!string.IsNullOrWhiteSpace(viewModel.Source)) + title += " | " + viewModel.Source; + SetText(m_titleView, title, viewModel.Culture); + } + + if (!hideRevision && viewModel.RevisionKey is IReportRevisionKey rev) { + using var lres = CoreMessages.Generic(viewModel.Culture); + var res = lres.RootMessageStringSet; + m_revisionViewContainer.SetActive(true); + if (rev.IsCancellation) + SetText(m_revisionView, res.GetString("SerialCancel") ?? "-", viewModel.Culture); + else + SetText(m_revisionView, string.Format(viewModel.Culture, res.GetString(rev.IsFinalRevision ? "SerialFinal" : "Serial") ?? "#{0}", rev.Serial), viewModel.Culture); + } + else { + m_revisionViewContainer.SetActive(false); + SetText(m_revisionView, null, viewModel.Culture); + } + + var keyProp = viewModel.Properties.FirstOrDefault(); + var props = viewModel.Properties.Skip(1); + SetView( + keyProp?.Severity ?? -1, + new Localized(viewModel.Location, viewModel.Culture), + new Localized(viewModel.Predicate, viewModel.Culture), + new Localized(viewModel.Time, viewModel.Culture), viewModel.TimeZone, + new Localized(keyProp, viewModel.Culture), + props.Select(i => new Localized(i, viewModel.Culture)) + ); + } + + protected static bool ShouldHideRevision(IReportRevisionKey key) { + return key == null || (key.Serial == null && !key.IsCancellation && !key.IsFinalRevision); + } + } +} diff --git a/Assets/Cryville.EEW.Unity/UI/EventReportView.cs.meta b/Assets/Cryville.EEW.Unity/UI/EventReportView.cs.meta new file mode 100644 index 0000000..d0bf935 --- /dev/null +++ b/Assets/Cryville.EEW.Unity/UI/EventReportView.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e740921cfbd27344a960c4245351e181 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Cryville.EEW.Unity/UI/EventUnitListView.cs b/Assets/Cryville.EEW.Unity/UI/EventUnitListView.cs new file mode 100644 index 0000000..73456b5 --- /dev/null +++ b/Assets/Cryville.EEW.Unity/UI/EventUnitListView.cs @@ -0,0 +1,25 @@ +using Cryville.EEW.Core; +using UnityEngine; + +namespace Cryville.EEW.Unity.UI { + class EventUnitListView : MonoBehaviour { + [SerializeField] + EventUnitView m_prefabEventUnitView; + + public void Set(ReportGroup group) { + foreach(Transform child in transform) { + child.SetParent(null, false); + Destroy(child.gameObject); + } + foreach(var unit in group) { + Add(unit); + } + } + void Add(ReportUnit unit) { + var child = Instantiate(m_prefabEventUnitView); + child.Set(unit); + child.transform.SetParent(transform, false); + child.transform.SetSiblingIndex(0); + } + } +} diff --git a/Assets/Cryville.EEW.Unity/UI/EventUnitListView.cs.meta b/Assets/Cryville.EEW.Unity/UI/EventUnitListView.cs.meta new file mode 100644 index 0000000..bf10402 --- /dev/null +++ b/Assets/Cryville.EEW.Unity/UI/EventUnitListView.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 47104cf79f65bc9479d1ee4c994c7596 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Cryville.EEW.Unity/UI/EventUnitView.cs b/Assets/Cryville.EEW.Unity/UI/EventUnitView.cs new file mode 100644 index 0000000..1916a83 --- /dev/null +++ b/Assets/Cryville.EEW.Unity/UI/EventUnitView.cs @@ -0,0 +1,27 @@ +using Cryville.EEW.Core; +using UnityEngine; +using UnityEngine.UI; + +namespace Cryville.EEW.Unity.UI { + class EventUnitView : EventReportView { + [SerializeField] EventListView m_listView; + + [SerializeField] Button m_revisionViewContainerButton; + + protected override void Start() { + base.Start(); + m_revisionViewContainerButton.onClick.AddListener(OnRevisionViewClicked); + } + void OnRevisionViewClicked() { + m_listView.gameObject.SetActive(!m_listView.gameObject.activeSelf); + } + + public void Set(ReportUnit unit) { + lock (unit) { + SetViewModel(unit.LatestReport, ShouldHideRevision(unit.LatestReport.RevisionKey) && unit.Count <= 1); + m_listView.Set(unit); + } + m_listView.gameObject.SetActive(false); + } + } +} diff --git a/Assets/Cryville.EEW.Unity/UI/EventUnitView.cs.meta b/Assets/Cryville.EEW.Unity/UI/EventUnitView.cs.meta new file mode 100644 index 0000000..766976e --- /dev/null +++ b/Assets/Cryville.EEW.Unity/UI/EventUnitView.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 734ae71f23b2c1f4d9b38aa06a0de86c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Cryville.EEW.Unity/UI/EventView.cs b/Assets/Cryville.EEW.Unity/UI/EventView.cs new file mode 100644 index 0000000..6a820ce --- /dev/null +++ b/Assets/Cryville.EEW.Unity/UI/EventView.cs @@ -0,0 +1,11 @@ +using Cryville.EEW.Report; + +namespace Cryville.EEW.Unity.UI { + class EventView : EventReportView { + protected override bool UseShortTimeFormat => true; + + public void Set(ReportViewModel e) { + SetViewModel(e); + } + } +} diff --git a/Assets/Cryville.EEW.Unity/UI/EventView.cs.meta b/Assets/Cryville.EEW.Unity/UI/EventView.cs.meta new file mode 100644 index 0000000..9c03e83 --- /dev/null +++ b/Assets/Cryville.EEW.Unity/UI/EventView.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9e5a2623e62bafc4e9f568053223b4ef +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Cryville.EEW.Unity/UI/Localized.cs b/Assets/Cryville.EEW.Unity/UI/Localized.cs new file mode 100644 index 0000000..45592b9 --- /dev/null +++ b/Assets/Cryville.EEW.Unity/UI/Localized.cs @@ -0,0 +1,23 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +namespace Cryville.EEW.Unity.UI { + struct Localized : IEquatable> { + public T Value { get; set; } + public CultureInfo Culture { get; set; } + + public Localized(T value, CultureInfo culture) { + Value = value; + Culture = culture; + } + + public override readonly bool Equals(object obj) => obj is Localized localized && Equals(localized); + public readonly bool Equals(Localized other) => + EqualityComparer.Default.Equals(Value, other.Value) && + EqualityComparer.Default.Equals(Culture, other.Culture); + public override readonly int GetHashCode() => HashCode.Combine(Value, Culture); + public static bool operator ==(Localized left, Localized right) => left.Equals(right); + public static bool operator !=(Localized left, Localized right) => !(left == right); + } +} diff --git a/Assets/Cryville.EEW.Unity/UI/Localized.cs.meta b/Assets/Cryville.EEW.Unity/UI/Localized.cs.meta new file mode 100644 index 0000000..aeb5457 --- /dev/null +++ b/Assets/Cryville.EEW.Unity/UI/Localized.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c53b913c973fee44484efbbfa998f942 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Cryville.EEW.Unity/Worker.cs b/Assets/Cryville.EEW.Unity/Worker.cs new file mode 100644 index 0000000..8a03491 --- /dev/null +++ b/Assets/Cryville.EEW.Unity/Worker.cs @@ -0,0 +1,154 @@ +using Cryville.EEW.Core; +using Cryville.EEW.CWAOpenData; +using Cryville.EEW.CWAOpenData.Model; +using Cryville.EEW.CWAOpenData.TTS; +using Cryville.EEW.GlobalQuake; +using Cryville.EEW.JMAAtom; +using Cryville.EEW.JMAAtom.TTS; +using Cryville.EEW.NOAA; +using Cryville.EEW.NOAA.TTS; +using Cryville.EEW.Report; +using Cryville.EEW.Unity.Map; +using Cryville.EEW.Unity.UI; +using Cryville.EEW.UpdateChecker; +using Cryville.EEW.Wolfx; +using Cryville.EEW.Wolfx.TTS; +using System; +using System.Collections.Concurrent; +using System.Threading; +using System.Threading.Tasks; +using UnityEngine; + +namespace Cryville.EEW.Unity { + sealed class Worker : MonoBehaviour { + public static Worker Instance { get; private set; } + + [SerializeField] + CameraController m_cameraController; + [SerializeField] + MapElementManager m_mapElementManager; + [SerializeField] + EventGroupListView m_historyEventGroupList; + + GroupingCoreWorker _worker; + CancellationTokenSource _cancellationTokenSource; + + void Awake() { + if (Instance != null) { + Destroy(this); + throw new InvalidOperationException("Duplicate worker."); + } + Instance = this; + + App.Init(); + + _worker = new(new TTSWorker()); + _cancellationTokenSource = new(); + } + + void Start() { + LocalizedResources.Init(new LocalizedResourcesManager()); + RegisterViewModelGenerators(_worker); + RegisterTTSMessageGenerators(_worker); + BuildWorkers(); + _worker.RVMGeneratorContext = SharedSettings.Instance; + _worker.TTSMessageGeneratorContext = SharedSettings.Instance; + _ongoingReportManager.Changed += OnOngoingReported; + _worker.Reported += OnReported; + _worker.GroupUpdated += OnGroupUpdated; + _worker.GroupRemoved += OnGroupRemoved; + Task.Run(() => _worker.RunAsync(_cancellationTokenSource.Token)); + Task.Run(() => _ongoingReportManager.RunAsync(_cancellationTokenSource.Token)); + } + + void OnDestroy() { + _cancellationTokenSource.Cancel(); + _worker.Dispose(); + _ongoingReportManager.Dispose(); + } + + static void RegisterViewModelGenerators(CoreWorker worker) { + worker.RegisterViewModelGenerator(new CENCEarthquakeRVMGenerator()); + worker.RegisterViewModelGenerator(new CENCEEWRVMGenerator()); + worker.RegisterViewModelGenerator(new CWAEarthquakeRVMGenerator()); + worker.RegisterViewModelGenerator(new CWAEEWRVMGenerator()); + worker.RegisterViewModelGenerator(new CWATsunamiRVMGenerator()); + worker.RegisterViewModelGenerator(new FujianEEWRVMGenerator()); + worker.RegisterViewModelGenerator(new GlobalQuakeRVMGenerator()); + worker.RegisterViewModelGenerator(new JMAAtomRVMGenerator()); + worker.RegisterViewModelGenerator(new JMAEEWRVMGenerator()); + worker.RegisterViewModelGenerator(new NOAAAtomRVMGenerator()); + worker.RegisterViewModelGenerator(new SichuanEEWRVMGenerator()); + worker.RegisterViewModelGenerator(new VersionRVMGenerator()); + } + static void RegisterTTSMessageGenerators(CoreWorker worker) { + worker.RegisterTTSMessageGenerator(new CENCEarthquakeTTSMessageGenerator()); + worker.RegisterTTSMessageGenerator(new CENCEEWTTSMessageGenerator()); + worker.RegisterTTSMessageGenerator(new CWAEarthquakeTTSMessageGenerator()); + worker.RegisterTTSMessageGenerator(new CWAEEWTTSMessageGenerator()); + worker.RegisterTTSMessageGenerator(new CWATsunamiTTSMessageGenerator()); + worker.RegisterTTSMessageGenerator(new FujianEEWTTSMessageGenerator()); + worker.RegisterTTSMessageGenerator(new JMAAtomTTSMessageGenerator()); + worker.RegisterTTSMessageGenerator(new JMAEEWTTSMessageGenerator()); + worker.RegisterTTSMessageGenerator(new NOAATTSMessageGenerator()); + worker.RegisterTTSMessageGenerator(new SichuanEEWTTSMessageGenerator()); + } + + WolfxWorker _wolfxWorker; + JMAAtomWorker _jmaWorker; + CWAReportWorker _cwa14Worker; + CWAReportWorker _cwa15Worker; + CWAReportWorker _cwa16Worker; + GlobalQuakeWorker _gqWorker; + NOAAAtomWorker _ntwcWorker; + NOAAAtomWorker _ptwcWorker; + UpdateCheckerWorker _updateChecker; + void BuildWorkers() { +#if UNITY_EDITOR + _worker.AddWorker(_wolfxWorker = new WolfxWorker(new Uri("ws://localhost:9995/wolfx"))); + _worker.AddWorker(_jmaWorker = new JMAAtomWorker(new Uri("http://localhost:9095/eqvol.xml"))); + _worker.AddWorker(_cwa14Worker = new CWAReportWorker(new Uri("http://localhost:9095/E-A0014-001.json"), "1")); + _worker.AddWorker(_cwa15Worker = new CWAReportWorker(new Uri("http://localhost:9095/E-A0015-001.json"), "1")); + _worker.AddWorker(_cwa16Worker = new CWAReportWorker(new Uri("http://localhost:9095/E-A0016-001.json"), "1")); + _worker.AddWorker(_ntwcWorker = new NOAAAtomWorker(new("http://localhost:9095/PAAQAtom.xml"))); + // _worker.AddWorker(_gqWorker = new GlobalQuakeWorker("localhost", 38000)); +#else + // TODO +#endif + if (_updateChecker == null) _worker.AddWorker(_updateChecker = new(typeof(Worker).Assembly.GetName().Version?.ToString(3) ?? "", "unity")); + } + + readonly OngoingReportManager _ongoingReportManager = new(); + readonly ConcurrentQueue _uiActionQueue = new(); + void OnReported(object sender, ReportViewModel e) { + Debug.Log(e); + _ongoingReportManager.Report(e); + _uiActionQueue.Enqueue(() => m_mapElementManager.SetSelected(e)); + } + void OnOngoingReported(ReportViewModel item, CollectionChangeAction action) { + if (action == CollectionChangeAction.Add) { + _uiActionQueue.Enqueue(() => m_mapElementManager.AddOngoing(item)); + } + else if (action == CollectionChangeAction.Remove) { + _uiActionQueue.Enqueue(() => m_mapElementManager.RemoveOngoing(item)); + } + } + void OnGroupUpdated(object sender, ReportGroup e) { + _uiActionQueue.Enqueue(() => m_historyEventGroupList.UpdateGroup(e)); + } + void OnGroupRemoved(object sender, ReportGroup e) { + _uiActionQueue.Enqueue(() => m_historyEventGroupList.RemoveGroup(e)); + } + public void SetSelected(ReportViewModel e) { + m_mapElementManager.SetSelected(e); + m_cameraController.OnMapElementUpdated(); + } + + void Update() { + while (_uiActionQueue.TryDequeue(out var action)) { + action(); + m_cameraController.OnMapElementUpdated(); + } + } + } +} diff --git a/Assets/Cryville.EEW.Unity/Worker.cs.meta b/Assets/Cryville.EEW.Unity/Worker.cs.meta new file mode 100644 index 0000000..29064b1 --- /dev/null +++ b/Assets/Cryville.EEW.Unity/Worker.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bb52721346df21a4a89269391fd1f9c3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Main.unity b/Assets/Main.unity new file mode 100644 index 0000000..7ad7ffe --- /dev/null +++ b/Assets/Main.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: 12 + 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: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 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: 512 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 256 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 1 + m_PVRDenoiserTypeDirect: 1 + m_PVRDenoiserTypeIndirect: 1 + m_PVRDenoiserTypeAO: 1 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 1 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 0} + m_LightingSettings: {fileID: 0} +--- !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 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &249202786 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 249202787} + - component: {fileID: 249202790} + - component: {fileID: 249202791} + - component: {fileID: 249202792} + m_Layer: 5 + m_Name: _content + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &249202787 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 249202786} + 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_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 800505390} + 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: 1} +--- !u!114 &249202790 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 249202786} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 6 + m_Right: 6 + m_Top: 6 + m_Bottom: 6 + m_ChildAlignment: 0 + m_Spacing: 8 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 + m_ChildScaleWidth: 0 + m_ChildScaleHeight: 1 + m_ReverseArrangement: 0 +--- !u!114 &249202791 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 249202786} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 0 + m_VerticalFit: 2 +--- !u!114 &249202792 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 249202786} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2426bd244f51fed429d955beee52e91d, type: 3} + m_Name: + m_EditorClassIdentifier: + m_prefabEventGroupView: {fileID: 1040273476696300640, guid: 5d21267de716a844c92260bad4d20b0a, type: 3} +--- !u!1 &303098820 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 303098822} + - component: {fileID: 303098821} + m_Layer: 0 + m_Name: Map Elements Sub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!114 &303098821 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 303098820} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dc48b51fb50522e4785fd56204934984, type: 3} + m_Name: + m_EditorClassIdentifier: + m_subManager: {fileID: 0} + m_prefabGroupElement: {fileID: 3251824911685425930, guid: 93a221313e69cc54ca54d64872e43b87, type: 3} + m_prefabMaskedGroupElement: {fileID: 5853702018268975928, guid: a2669193cdb0cb248998879dd180a85e, type: 3} + m_prefabOngoingGroupElement: {fileID: 1015977942096609801, guid: 6ce05688e256123478c2ca8329d68cd5, type: 3} + m_prefabHypocenterElement: {fileID: 6523728710437040770, guid: 56335292a0aa9af4bad613f8f033379c, type: 3} + m_prefabLabeledPointElement: {fileID: 215961244889298507, guid: 9ebc6d06c5a9ced4da5b46b064820f6e, type: 3} + m_prefabMultiLineElement: {fileID: 8663554297803987547, guid: 0e2f332f291cf374ca6888465df91fb2, type: 3} + m_prefabMultiPolygonElement: {fileID: -885788347912338764, guid: 1d3c21552432c374c8fca236230fc58b, type: 3} + m_prefabPointElement: {fileID: 2146741774911736149, guid: fc4b6950e0f83a241b56aba1be3ef8c4, type: 3} + m_prefabTsunamiHeightElement: {fileID: 8456673658325140948, guid: 07cc8e8fd5cdbdd418d0338a61b14693, type: 3} + m_prefabWaveCircleElement: {fileID: 5660376597462042753, guid: 83ac8144d34b1384c8e488baf808045d, type: 3} +--- !u!4 &303098822 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 303098820} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -1} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &376792586 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 376792589} + - component: {fileID: 376792588} + - component: {fileID: 376792590} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!20 &376792588 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 376792586} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0, g: 0, b: 0, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 0.75 + height: 1 + near clip plane: 1 + far clip plane: 40 + field of view: 60 + orthographic: 1 + orthographic size: 0.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 &376792589 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 376792586} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.5, y: -0.5, z: -20} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &376792590 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 376792586} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 07c8433af4f94ee4b9fa3286a384ffe2, type: 3} + m_Name: + m_EditorClassIdentifier: + m_layerTile: {fileID: 1412061072} + m_layerElement: {fileID: 1602500234} + m_layerElementSub: {fileID: 303098821} + m_prefabTile: {fileID: 7683017549812261837, guid: e090edd328c6750478f5849a43a9d278, type: 3} +--- !u!1 &800505389 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 800505390} + m_Layer: 5 + m_Name: _viewport + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &800505390 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 800505389} + 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_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 249202787} + m_Father: {fileID: 1349222219} + 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!1 &1345962671 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1345962672} + - component: {fileID: 1345962673} + m_Layer: 0 + m_Name: Worker + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1345962672 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1345962671} + 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_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1345962673 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1345962671} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bb52721346df21a4a89269391fd1f9c3, type: 3} + m_Name: + m_EditorClassIdentifier: + m_cameraController: {fileID: 376792590} + m_mapElementManager: {fileID: 1602500234} + m_historyEventGroupList: {fileID: 249202792} +--- !u!1 &1349222218 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1349222219} + - component: {fileID: 1349222222} + - component: {fileID: 1349222221} + - component: {fileID: 1349222220} + m_Layer: 5 + m_Name: History Panel + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1349222219 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1349222218} + 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_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 800505390} + m_Father: {fileID: 1431650511} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.75, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 1, y: 0.5} +--- !u!114 &1349222220 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1349222218} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1aa08ab6e0800fa44ae55d278d1423e3, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Content: {fileID: 249202787} + m_Horizontal: 0 + m_Vertical: 1 + m_MovementType: 1 + m_Elasticity: 0.1 + m_Inertia: 1 + m_DecelerationRate: 0.135 + m_ScrollSensitivity: 32 + m_Viewport: {fileID: 800505390} + m_HorizontalScrollbar: {fileID: 0} + m_VerticalScrollbar: {fileID: 0} + m_HorizontalScrollbarVisibility: 0 + m_VerticalScrollbarVisibility: 0 + m_HorizontalScrollbarSpacing: 0 + m_VerticalScrollbarSpacing: 0 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] +--- !u!114 &1349222221 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1349222218} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.101960786, g: 0.06666667, b: 0.0627451, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1349222222 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1349222218} + m_CullTransparentMesh: 1 +--- !u!1 &1369572174 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1369572175} + m_Layer: 5 + m_Name: Ongoing Panel + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1369572175 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1369572174} + 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_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1431650511} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0.25, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &1412061071 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1412061072} + m_Layer: 0 + m_Name: Map Tiles + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1412061072 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1412061071} + 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_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1431650507 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1431650511} + - component: {fileID: 1431650510} + - component: {fileID: 1431650509} + - component: {fileID: 1431650508} + m_Layer: 5 + m_Name: Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1431650508 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1431650507} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4294967295 +--- !u!114 &1431650509 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1431650507} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 1 + m_ReferencePixelsPerUnit: 120 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 1280, y: 720} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 1 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 + m_PresetInfoIsWorld: 0 +--- !u!223 &1431650510 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1431650507} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 0 + m_Camera: {fileID: 376792588} + m_PlaneDistance: 1 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 1 + m_SortingLayerID: -1804956909 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!224 &1431650511 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1431650507} + 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_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1369572175} + - {fileID: 1349222219} + m_Father: {fileID: 0} + m_RootOrder: 5 + 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 &1602500232 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1602500233} + - component: {fileID: 1602500234} + m_Layer: 0 + m_Name: Map Elements + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1602500233 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1602500232} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -1} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1602500234 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1602500232} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dc48b51fb50522e4785fd56204934984, type: 3} + m_Name: + m_EditorClassIdentifier: + m_subManager: {fileID: 303098821} + m_prefabGroupElement: {fileID: 3251824911685425930, guid: 93a221313e69cc54ca54d64872e43b87, type: 3} + m_prefabMaskedGroupElement: {fileID: 5853702018268975928, guid: a2669193cdb0cb248998879dd180a85e, type: 3} + m_prefabOngoingGroupElement: {fileID: 1015977942096609801, guid: 6ce05688e256123478c2ca8329d68cd5, type: 3} + m_prefabHypocenterElement: {fileID: 6523728710437040770, guid: 56335292a0aa9af4bad613f8f033379c, type: 3} + m_prefabLabeledPointElement: {fileID: 215961244889298507, guid: 9ebc6d06c5a9ced4da5b46b064820f6e, type: 3} + m_prefabMultiLineElement: {fileID: 8663554297803987547, guid: 0e2f332f291cf374ca6888465df91fb2, type: 3} + m_prefabMultiPolygonElement: {fileID: -885788347912338764, guid: 1d3c21552432c374c8fca236230fc58b, type: 3} + m_prefabPointElement: {fileID: 2146741774911736149, guid: fc4b6950e0f83a241b56aba1be3ef8c4, type: 3} + m_prefabTsunamiHeightElement: {fileID: 8456673658325140948, guid: 07cc8e8fd5cdbdd418d0338a61b14693, type: 3} + m_prefabWaveCircleElement: {fileID: 5660376597462042753, guid: 83ac8144d34b1384c8e488baf808045d, type: 3} +--- !u!1 &1830884590 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1830884593} + - component: {fileID: 1830884592} + - component: {fileID: 1830884591} + m_Layer: 0 + m_Name: EventSystem + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1830884591 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1830884590} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4f231c4fb786f3946a6b90b886c48677, type: 3} + m_Name: + m_EditorClassIdentifier: + m_SendPointerHoverToParent: 1 + m_HorizontalAxis: Horizontal + m_VerticalAxis: Vertical + m_SubmitButton: Submit + m_CancelButton: Cancel + m_InputActionsPerSecond: 10 + m_RepeatDelay: 0.5 + m_ForceModuleActive: 0 +--- !u!114 &1830884592 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1830884590} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 76c392e42b5098c458856cdf6ecaaaa1, type: 3} + m_Name: + m_EditorClassIdentifier: + m_FirstSelected: {fileID: 0} + m_sendNavigationEvents: 1 + m_DragThreshold: 10 +--- !u!4 &1830884593 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1830884590} + 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_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} diff --git a/Assets/Main.unity.meta b/Assets/Main.unity.meta new file mode 100644 index 0000000..1e9872c --- /dev/null +++ b/Assets/Main.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 73f6d740b4b1f2e42bb8b4e2d9b95c90 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Materials.meta b/Assets/Materials.meta new file mode 100644 index 0000000..49285c3 --- /dev/null +++ b/Assets/Materials.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 840586e1cf2158243aa8e268c77c9626 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Materials/LineDash_3_1.mat b/Assets/Materials/LineDash_3_1.mat new file mode 100644 index 0000000..e502edf --- /dev/null +++ b/Assets/Materials/LineDash_3_1.mat @@ -0,0 +1,40 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: LineDash_3_1 + m_Shader: {fileID: 10753, guid: 0000000000000000f000000000000000, type: 0} + m_ValidKeywords: [] + m_InvalidKeywords: + - _ALPHATEST_ON + 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} + - _MainTex: + m_Texture: {fileID: 2800000, guid: 6b05e97e5fa3de54b850e0fe13f6dcee, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - PixelSnap: 0 + - _EnableExternalAlpha: 0 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _Flip: {r: 1, g: 1, b: 1, a: 1} + - _RendererColor: {r: 1, g: 1, b: 1, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/Materials/LineDash_3_1.mat.meta b/Assets/Materials/LineDash_3_1.mat.meta new file mode 100644 index 0000000..f7fbb1c --- /dev/null +++ b/Assets/Materials/LineDash_3_1.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 042ab51a88dcec14c862d721d502c44b +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Materials/Mask.mat b/Assets/Materials/Mask.mat new file mode 100644 index 0000000..c42680d --- /dev/null +++ b/Assets/Materials/Mask.mat @@ -0,0 +1,81 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Mask + m_Shader: {fileID: 4800000, guid: 3f93297dafa09bc488f631b61576f15d, type: 3} + m_ValidKeywords: [] + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _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_Ints: [] + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Mask: 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: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/Materials/Mask.mat.meta b/Assets/Materials/Mask.mat.meta new file mode 100644 index 0000000..c9648ff --- /dev/null +++ b/Assets/Materials/Mask.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 920545efa6cc39945b5ccd0bcd6d47e7 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Materials/Masked.mat b/Assets/Materials/Masked.mat new file mode 100644 index 0000000..5992ca7 --- /dev/null +++ b/Assets/Materials/Masked.mat @@ -0,0 +1,81 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Masked + m_Shader: {fileID: 4800000, guid: 9a288241ef8ea614dba716a82997ae1a, type: 3} + m_ValidKeywords: [] + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _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_Ints: [] + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Mask: 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: 1, b: 1, a: 0} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/Materials/Masked.mat.meta b/Assets/Materials/Masked.mat.meta new file mode 100644 index 0000000..cf84347 --- /dev/null +++ b/Assets/Materials/Masked.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0ac8d21fd27824647ad7bbb7b7e5d3f2 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins.meta b/Assets/Plugins.meta new file mode 100644 index 0000000..1cf8564 --- /dev/null +++ b/Assets/Plugins.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b25eeaad081fb7a44942c5dbea19a1da +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Cryville.Audio.Source.Resample.dll b/Assets/Plugins/Cryville.Audio.Source.Resample.dll new file mode 100644 index 0000000..a4fa8bb Binary files /dev/null and b/Assets/Plugins/Cryville.Audio.Source.Resample.dll differ diff --git a/Assets/Plugins/Cryville.Audio.Source.Resample.dll.meta b/Assets/Plugins/Cryville.Audio.Source.Resample.dll.meta new file mode 100644 index 0000000..35a5096 --- /dev/null +++ b/Assets/Plugins/Cryville.Audio.Source.Resample.dll.meta @@ -0,0 +1,33 @@ +fileFormatVersion: 2 +guid: 10b954b67e28e454e9c09356caeb2242 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Cryville.Audio.dll b/Assets/Plugins/Cryville.Audio.dll new file mode 100644 index 0000000..cc7ed19 Binary files /dev/null and b/Assets/Plugins/Cryville.Audio.dll differ diff --git a/Assets/Plugins/Cryville.Audio.dll.meta b/Assets/Plugins/Cryville.Audio.dll.meta new file mode 100644 index 0000000..159b413 --- /dev/null +++ b/Assets/Plugins/Cryville.Audio.dll.meta @@ -0,0 +1,33 @@ +fileFormatVersion: 2 +guid: c691ac281fb46a2429494f29b8ea9989 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Cryville.Common.Buffers.dll b/Assets/Plugins/Cryville.Common.Buffers.dll new file mode 100644 index 0000000..9b0f575 Binary files /dev/null and b/Assets/Plugins/Cryville.Common.Buffers.dll differ diff --git a/Assets/Plugins/Cryville.Common.Buffers.dll.meta b/Assets/Plugins/Cryville.Common.Buffers.dll.meta new file mode 100644 index 0000000..dfc5fbf --- /dev/null +++ b/Assets/Plugins/Cryville.Common.Buffers.dll.meta @@ -0,0 +1,33 @@ +fileFormatVersion: 2 +guid: d0a7b12d60cd31d46830e900047e8734 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Cryville.Common.Compat.dll b/Assets/Plugins/Cryville.Common.Compat.dll new file mode 100644 index 0000000..f7628df Binary files /dev/null and b/Assets/Plugins/Cryville.Common.Compat.dll differ diff --git a/Assets/Plugins/Cryville.Common.Compat.dll.meta b/Assets/Plugins/Cryville.Common.Compat.dll.meta new file mode 100644 index 0000000..d2a8903 --- /dev/null +++ b/Assets/Plugins/Cryville.Common.Compat.dll.meta @@ -0,0 +1,33 @@ +fileFormatVersion: 2 +guid: 6400143f55350694b924a2743b16b0ae +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Cryville.Culture.dll b/Assets/Plugins/Cryville.Culture.dll new file mode 100644 index 0000000..f78ca84 Binary files /dev/null and b/Assets/Plugins/Cryville.Culture.dll differ diff --git a/Assets/Plugins/Cryville.Culture.dll.meta b/Assets/Plugins/Cryville.Culture.dll.meta new file mode 100644 index 0000000..9b3d56a --- /dev/null +++ b/Assets/Plugins/Cryville.Culture.dll.meta @@ -0,0 +1,33 @@ +fileFormatVersion: 2 +guid: e8e78e82d56ab434c8bb437a3838ece0 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Cryville.Culture.xml b/Assets/Plugins/Cryville.Culture.xml new file mode 100644 index 0000000..27255b5 --- /dev/null +++ b/Assets/Plugins/Cryville.Culture.xml @@ -0,0 +1,271 @@ + + + + Cryville.Culture + + + + + æä¾›ä¸€ç³»åˆ—基于 ID æœ‰æ•ˆæ€§æ•°æ®æ£€æŸ¥ ID 有效性的方法。 + + + + è¯¥ç±»è§£æž CLDR 中 common/validity 目录中的 XML 文档。 + + + + + + 从一个 XML 文档中加载有效性数æ®ã€‚ + + è¦åŠ è½½çš„ XML 文档。 + + 为 。 + + 文档中的一个 ID 列表已被加载。 + + + è¯¥æ–¹æ³•è§£æž CLDR 中 common/validity 目录中的 XML 文档。 + + + + + + 获å–一个 ID çš„ ID 状æ€ã€‚ + + è¦æ£€æŸ¥çš„ ID。 + ID 的类型。 + + ID çš„ ID 状æ€ã€‚如果没找到 ID 则返回 。 + + 没有找到或没有加载给定类型的 ID 列表。 + + + + 确定一个 ID 是å¦å¤„于给定的状æ€ã€‚ + + è¦æ£€æŸ¥çš„ ID。 + ID 的类型。 + è¦æ£€æŸ¥çš„状æ€ã€‚ + 给定的 ID 是å¦å¤„于给定的状æ€ã€‚ + 没有找到或没有加载给定类型和给定状æ€çš„ ID 列表。 + + + + 获å–给定类型的所有 ID 的列表。 + + ID 的类型。 + 给定类型的所有 ID 的列表。 + 没有找到或没有加载给定类型的 ID 列表。 + + + + 获å–给定类型和给定状æ€çš„æ‰€æœ‰ ID 的列表。 + + ID 的类型。 + ID 的状æ€ã€‚ + 给定类型和给定状æ€çš„æ‰€æœ‰ ID 的列表。 + 没有找到或没有加载给定类型和给定状æ€çš„ ID 列表。 + + + + 表示一个 Unicode 语言标识符。 + + + + + è¯­è¨€å­æ ‡ç­¾ã€‚ + + + + + æ–‡å­—å­æ ‡ç­¾ã€‚ + + + + + åŒºåŸŸå­æ ‡ç­¾ã€‚ + + + + + å˜ä½“å­æ ‡ç­¾ã€‚ + + + + + 创建一个 结构体的实例。 + + 标识符的字符串表示。 + + 为 。 + + 输入的字符串格å¼ä¸æ­£ç¡®ã€‚ + + + + å½“å‰ Unicode 语言标识符是å¦è¡¨ç¤ºä¸€ä¸ªä¿ç•™æ ‡ç­¾ï¼ˆgrandfathered tag)。 + + + + + å½“å‰ Unicode è¯­è¨€æ ‡è¯†ç¬¦æ˜¯å¦æœ‰æ•ˆã€‚ + + + + 该属性通过调用 æ¥ç¡®å®šå…¶æ‰€æœ‰å­æ ‡ç­¾æ˜¯å¦æœ‰æ•ˆã€‚获å–该属性å‰ï¼Œå…ˆè°ƒç”¨ 加载有效性数æ®ã€‚ + + + + + + 获å–å½“å‰ Unicode 语言标识符的一个标准语法版本。 + + + + + 获å–å½“å‰ Unicode 语言标识符的一个副本。 + + æ˜¯å¦æŽ’é™¤å˜ä½“å­æ ‡ç­¾ã€‚ + å½“å‰ Unicode 语言标识符的一个副本。 + + + + + + + + + + + + + + + + + + + + + + æä¾›åŸºäºŽè¯­è¨€åŒ¹é…æ•°æ®ä¸ºè¯·æ±‚的语言匹é…一个应用支æŒçš„语言的方法。 + + + + è¯¥ç±»è§£æž CLDR 中的 common/supplemental/languageInfo.xml。 + + + + + + 创建一个 类的实例。 + + + è¦åŠ è½½çš„ languageInfo XML 文档。 + + å­æ ‡ç­¾å€¾å‘æ•°æ®ã€‚ + + 或 为 。 + + + 给定的 languageInfo XML 文档无效。 + + + + + 计算两个语言之间的è·ç¦»ã€‚ + + 起点语言。 + 终点语言。 + + 从 语言到 语言的è·ç¦»ã€‚ + + 无法计算è·ç¦»ã€‚ + + + + 从支æŒçš„语言列表中为请求的语言匹é…一个语言。 + + 请求的语言。 + 支æŒçš„语言列表。 + + 匹é…的语言。如果没有匹é…则为 的默认值。 + + + 从 到 çš„è·ç¦»ã€‚如果没有匹é…则为 。 + + åŒ¹é…æ˜¯å¦æˆåŠŸã€‚ + + 为 。 + + + + + æä¾›åŸºäºŽå­æ ‡ç­¾å€¾å‘æ•°æ®æœ€å¤§åŒ–和最å°åŒ– Unicode 语言标识符的方法。 + + + + è¯¥ç±»è§£æž CLDR 中的 common/supplemental/likelySubtags.xml。 + + + + + + 创建一个 类的实例。 + + + è¦åŠ è½½çš„ likelySubtags XML 文档。 + + åˆ«åæ•°æ®ã€‚ + + 或 为 。 + + + + + 最大化一个 Unicode 语言标识符。 + + è¦æœ€å¤§åŒ–çš„ Unicode 语言标识符。 + 最大化的 Unicode 语言标识符。 + 没有找到匹é…çš„å­æ ‡ç­¾å€¾å‘。 + + + + 最å°åŒ–一个 Unicode 语言标识符。 + + è¦æœ€å°åŒ–çš„ Unicode 语言标识符。 + 是å¦å€¾å‘ä¿ç•™æ–‡å­—å­æ ‡ç­¾è€Œä¸æ˜¯åŒºåŸŸå­æ ‡ç­¾ã€‚ + 最å°åŒ–çš„ Unicode 语言标识符。 + 没有找到匹é…çš„å­æ ‡ç­¾å€¾å‘。 + + + + æä¾›åŸºäºŽåˆ«åæ•°æ®å°†ä¸€ä¸ªåˆ«å ID 转æ¢ä¸ºå…¶æ ‡å‡†å½¢å¼çš„æ–¹æ³•。 + + + + è¯¥ç±»è§£æž CLDR 中的 common/supplemental/supplementalMetadata.xml。 + + + + + + 创建一个 类的实例。 + + + è¦åŠ è½½çš„ supplementalMetadata XML 文档。 + + + 为 。 + + + + + 将一个 Unicode 语言标识符内的所有别åå­æ ‡ç­¾è½¬æ¢ä¸ºå…¶æ ‡å‡†å½¢å¼ã€‚ + + è¦è½¬æ¢çš„ Unicode 语言标识符。 + 标准化的 Unicode 语言标识符。 + + + diff --git a/Assets/Plugins/Cryville.Culture.xml.meta b/Assets/Plugins/Cryville.Culture.xml.meta new file mode 100644 index 0000000..680096d --- /dev/null +++ b/Assets/Plugins/Cryville.Culture.xml.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 378cfcd9bd044114a8b6d5356d57b450 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Cryville.EEW.CWA.dll b/Assets/Plugins/Cryville.EEW.CWA.dll new file mode 100644 index 0000000..9a3460c Binary files /dev/null and b/Assets/Plugins/Cryville.EEW.CWA.dll differ diff --git a/Assets/Plugins/Cryville.EEW.CWA.dll.meta b/Assets/Plugins/Cryville.EEW.CWA.dll.meta new file mode 100644 index 0000000..dff4adf --- /dev/null +++ b/Assets/Plugins/Cryville.EEW.CWA.dll.meta @@ -0,0 +1,33 @@ +fileFormatVersion: 2 +guid: bbd7028c8e208de4baba16953f3d7994 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Cryville.EEW.CWAOpenData.Map.dll b/Assets/Plugins/Cryville.EEW.CWAOpenData.Map.dll new file mode 100644 index 0000000..076b9e9 Binary files /dev/null and b/Assets/Plugins/Cryville.EEW.CWAOpenData.Map.dll differ diff --git a/Assets/Plugins/Cryville.EEW.CWAOpenData.Map.dll.meta b/Assets/Plugins/Cryville.EEW.CWAOpenData.Map.dll.meta new file mode 100644 index 0000000..a919162 --- /dev/null +++ b/Assets/Plugins/Cryville.EEW.CWAOpenData.Map.dll.meta @@ -0,0 +1,33 @@ +fileFormatVersion: 2 +guid: 8d1f8c7a3ad93a24fac5fb10f77cf181 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Cryville.EEW.CWAOpenData.TTS.dll b/Assets/Plugins/Cryville.EEW.CWAOpenData.TTS.dll new file mode 100644 index 0000000..833d486 Binary files /dev/null and b/Assets/Plugins/Cryville.EEW.CWAOpenData.TTS.dll differ diff --git a/Assets/Plugins/Cryville.EEW.CWAOpenData.TTS.dll.meta b/Assets/Plugins/Cryville.EEW.CWAOpenData.TTS.dll.meta new file mode 100644 index 0000000..1e85494 --- /dev/null +++ b/Assets/Plugins/Cryville.EEW.CWAOpenData.TTS.dll.meta @@ -0,0 +1,33 @@ +fileFormatVersion: 2 +guid: 45cfa09bfc590d6409f71a1e47295469 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Cryville.EEW.CWAOpenData.dll b/Assets/Plugins/Cryville.EEW.CWAOpenData.dll new file mode 100644 index 0000000..917764a Binary files /dev/null and b/Assets/Plugins/Cryville.EEW.CWAOpenData.dll differ diff --git a/Assets/Plugins/Cryville.EEW.CWAOpenData.dll.meta b/Assets/Plugins/Cryville.EEW.CWAOpenData.dll.meta new file mode 100644 index 0000000..4b89b83 --- /dev/null +++ b/Assets/Plugins/Cryville.EEW.CWAOpenData.dll.meta @@ -0,0 +1,33 @@ +fileFormatVersion: 2 +guid: 35ea5e9381f6a3f41a32711f14839a50 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Cryville.EEW.Colors.dll b/Assets/Plugins/Cryville.EEW.Colors.dll new file mode 100644 index 0000000..2c20449 Binary files /dev/null and b/Assets/Plugins/Cryville.EEW.Colors.dll differ diff --git a/Assets/Plugins/Cryville.EEW.Colors.dll.meta b/Assets/Plugins/Cryville.EEW.Colors.dll.meta new file mode 100644 index 0000000..35370e4 --- /dev/null +++ b/Assets/Plugins/Cryville.EEW.Colors.dll.meta @@ -0,0 +1,33 @@ +fileFormatVersion: 2 +guid: c5001c2ca06c6ab44b21914f55312fe0 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Cryville.EEW.Colors.xml b/Assets/Plugins/Cryville.EEW.Colors.xml new file mode 100644 index 0000000..7e2a640 --- /dev/null +++ b/Assets/Plugins/Cryville.EEW.Colors.xml @@ -0,0 +1,223 @@ + + + + Cryville.EEW.Colors + + + + + Contains methods related to color spaces. + + + + + Converts a OkLch color to sRGB. + + The alpha channel (0-255). + The luminance channel. + The chroma channel. + The hue channel. + + + + + An empty that always returns . + + + + + The shared instance of the class. + + + + + The shared instance of the class wrapped around . + + + + + + + + Represents a color. + + + + + Converts the current instance to an sRGB color. + + The converted color. + + + + The lightness of the color. 0 represents a black color; 1 represents a white color. + + + + + Represents a color scheme, extracting colors from different properties. + + + + + Extracts a color from a property. + + The type of the property. + The value of the property. + The color. + + + + Extracts a color from a set properties. + + The properties. + The color. + + + + Represents a mapping that maps severity to color. + + + + + Extracts a color from severity. + + The severity. + The luminance of the color. + The color. + + + + Extracts a color from severity. + + The severity. + The color. + + + + Represents a sub-color scheme, extracting colors from different properties. + + + + + Extracts a color from a property. + + The type of the property. + The value of the property. + The color extracted from the same property from another color scheme. + The color. + + + + Extracts a color from a set properties. + + The properties. + The color extracted from the same property from another color scheme. + The color. + + + + A color scheme that is based on a severity scheme and a severity color mapping. + + The severity scheme. + The severity color mapping. + + + + A color scheme that is based on a severity scheme and a severity color mapping. + + The severity scheme. + The severity color mapping. + + + + + + + + + + Represents an sRGB color. + + The alpha channel. + The red channel. + The green channel. + The blue channel. + + + + Represents an sRGB color. + + The alpha channel. + The red channel. + The green channel. + The blue channel. + + + The alpha channel. + + + The red channel. + + + The green channel. + + + The blue channel. + + + + Creates an instance of the struct, with the alpha channel set to 255. + + The red channel. + The green channel. + The blue channel. + + + + Converts a system color to an instance of the struct. + + The system color. + The converted color. + + + + Converts a system color to an instance of the struct. + + The system color. + + + + + + + Converts the current instance to a system color. + + The converted color. + + + + Converts an instance of the struct to a system color. + + The color. + + + + A sub color scheme identical to a specific color scheme. + + The color scheme this sub color scheme is based on. + + + + A sub color scheme identical to a specific color scheme. + + The color scheme this sub color scheme is based on. + + + + + + + + + diff --git a/Assets/Plugins/Cryville.EEW.Colors.xml.meta b/Assets/Plugins/Cryville.EEW.Colors.xml.meta new file mode 100644 index 0000000..391c803 --- /dev/null +++ b/Assets/Plugins/Cryville.EEW.Colors.xml.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: f834593e641dd3e46953e3c5326f17b9 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Cryville.EEW.Core.dll b/Assets/Plugins/Cryville.EEW.Core.dll new file mode 100644 index 0000000..d397cbf Binary files /dev/null and b/Assets/Plugins/Cryville.EEW.Core.dll differ diff --git a/Assets/Plugins/Cryville.EEW.Core.dll.meta b/Assets/Plugins/Cryville.EEW.Core.dll.meta new file mode 100644 index 0000000..58cc2dd --- /dev/null +++ b/Assets/Plugins/Cryville.EEW.Core.dll.meta @@ -0,0 +1,33 @@ +fileFormatVersion: 2 +guid: f43b9018a46d4c94c86b8fcecccdd731 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Cryville.EEW.FERegion.dll b/Assets/Plugins/Cryville.EEW.FERegion.dll new file mode 100644 index 0000000..d0f6542 Binary files /dev/null and b/Assets/Plugins/Cryville.EEW.FERegion.dll differ diff --git a/Assets/Plugins/Cryville.EEW.FERegion.dll.meta b/Assets/Plugins/Cryville.EEW.FERegion.dll.meta new file mode 100644 index 0000000..a8014a4 --- /dev/null +++ b/Assets/Plugins/Cryville.EEW.FERegion.dll.meta @@ -0,0 +1,33 @@ +fileFormatVersion: 2 +guid: 2e1f757b879267741a4ce2c3e9b90cfb +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Cryville.EEW.GlobalQuake.Map.dll b/Assets/Plugins/Cryville.EEW.GlobalQuake.Map.dll new file mode 100644 index 0000000..504b3af Binary files /dev/null and b/Assets/Plugins/Cryville.EEW.GlobalQuake.Map.dll differ diff --git a/Assets/Plugins/Cryville.EEW.GlobalQuake.Map.dll.meta b/Assets/Plugins/Cryville.EEW.GlobalQuake.Map.dll.meta new file mode 100644 index 0000000..bc0ecd6 --- /dev/null +++ b/Assets/Plugins/Cryville.EEW.GlobalQuake.Map.dll.meta @@ -0,0 +1,33 @@ +fileFormatVersion: 2 +guid: 1f171de94b2452a4cbbd151070e1311f +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Cryville.EEW.GlobalQuake.dll b/Assets/Plugins/Cryville.EEW.GlobalQuake.dll new file mode 100644 index 0000000..1d2aceb Binary files /dev/null and b/Assets/Plugins/Cryville.EEW.GlobalQuake.dll differ diff --git a/Assets/Plugins/Cryville.EEW.GlobalQuake.dll.meta b/Assets/Plugins/Cryville.EEW.GlobalQuake.dll.meta new file mode 100644 index 0000000..44ef244 --- /dev/null +++ b/Assets/Plugins/Cryville.EEW.GlobalQuake.dll.meta @@ -0,0 +1,33 @@ +fileFormatVersion: 2 +guid: 04db10530eaf4a84ca2096e9959909e9 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Cryville.EEW.JMA.Map.dll b/Assets/Plugins/Cryville.EEW.JMA.Map.dll new file mode 100644 index 0000000..ccf7d51 Binary files /dev/null and b/Assets/Plugins/Cryville.EEW.JMA.Map.dll differ diff --git a/Assets/Plugins/Cryville.EEW.JMA.Map.dll.meta b/Assets/Plugins/Cryville.EEW.JMA.Map.dll.meta new file mode 100644 index 0000000..2084c71 --- /dev/null +++ b/Assets/Plugins/Cryville.EEW.JMA.Map.dll.meta @@ -0,0 +1,33 @@ +fileFormatVersion: 2 +guid: c562a6a2a51fc9346b5d291b89cea2f5 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Cryville.EEW.JMA.dll b/Assets/Plugins/Cryville.EEW.JMA.dll new file mode 100644 index 0000000..d24ccdb Binary files /dev/null and b/Assets/Plugins/Cryville.EEW.JMA.dll differ diff --git a/Assets/Plugins/Cryville.EEW.JMA.dll.meta b/Assets/Plugins/Cryville.EEW.JMA.dll.meta new file mode 100644 index 0000000..5c97990 --- /dev/null +++ b/Assets/Plugins/Cryville.EEW.JMA.dll.meta @@ -0,0 +1,33 @@ +fileFormatVersion: 2 +guid: 4675910bbaebec049ad6f8d77bf6b0d7 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Cryville.EEW.JMAAtom.Map.dll b/Assets/Plugins/Cryville.EEW.JMAAtom.Map.dll new file mode 100644 index 0000000..09818fe Binary files /dev/null and b/Assets/Plugins/Cryville.EEW.JMAAtom.Map.dll differ diff --git a/Assets/Plugins/Cryville.EEW.JMAAtom.Map.dll.meta b/Assets/Plugins/Cryville.EEW.JMAAtom.Map.dll.meta new file mode 100644 index 0000000..2965e39 --- /dev/null +++ b/Assets/Plugins/Cryville.EEW.JMAAtom.Map.dll.meta @@ -0,0 +1,33 @@ +fileFormatVersion: 2 +guid: 8fe0570f760f4214f993f5217e0166b2 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Cryville.EEW.JMAAtom.TTS.dll b/Assets/Plugins/Cryville.EEW.JMAAtom.TTS.dll new file mode 100644 index 0000000..ad440db Binary files /dev/null and b/Assets/Plugins/Cryville.EEW.JMAAtom.TTS.dll differ diff --git a/Assets/Plugins/Cryville.EEW.JMAAtom.TTS.dll.meta b/Assets/Plugins/Cryville.EEW.JMAAtom.TTS.dll.meta new file mode 100644 index 0000000..7713d27 --- /dev/null +++ b/Assets/Plugins/Cryville.EEW.JMAAtom.TTS.dll.meta @@ -0,0 +1,33 @@ +fileFormatVersion: 2 +guid: 37ed47e9ab4b01b40819663f4af92283 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Cryville.EEW.JMAAtom.dll b/Assets/Plugins/Cryville.EEW.JMAAtom.dll new file mode 100644 index 0000000..1a3e068 Binary files /dev/null and b/Assets/Plugins/Cryville.EEW.JMAAtom.dll differ diff --git a/Assets/Plugins/Cryville.EEW.JMAAtom.dll.meta b/Assets/Plugins/Cryville.EEW.JMAAtom.dll.meta new file mode 100644 index 0000000..67e7a06 --- /dev/null +++ b/Assets/Plugins/Cryville.EEW.JMAAtom.dll.meta @@ -0,0 +1,33 @@ +fileFormatVersion: 2 +guid: f1c3e59800c7cd140ba8f15882043aad +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Cryville.EEW.Map.dll b/Assets/Plugins/Cryville.EEW.Map.dll new file mode 100644 index 0000000..11ec895 Binary files /dev/null and b/Assets/Plugins/Cryville.EEW.Map.dll differ diff --git a/Assets/Plugins/Cryville.EEW.Map.dll.meta b/Assets/Plugins/Cryville.EEW.Map.dll.meta new file mode 100644 index 0000000..3af8271 --- /dev/null +++ b/Assets/Plugins/Cryville.EEW.Map.dll.meta @@ -0,0 +1,33 @@ +fileFormatVersion: 2 +guid: 912e8b96775628c42b791f4fab89a87c +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Cryville.EEW.Map.xml b/Assets/Plugins/Cryville.EEW.Map.xml new file mode 100644 index 0000000..638c0b1 --- /dev/null +++ b/Assets/Plugins/Cryville.EEW.Map.xml @@ -0,0 +1,470 @@ + + + + Cryville.EEW.Map + + + + + An empty . + + + + + A shared instance of the class. + + + + + + + + + + + + + + + + + Contains utility methods that extracts coordinates from GeoJSON objects. + + + + + Extracts coordinates from an instance of the struct. + + The position. + The coordinates. + + + + Extracts coordinates from an array of instances of the struct. + + the position array. + The coordinates. + + + + Extracts coordinates from an instance of the class. + + The line string. + The coordinates. + + + + Extracts coordinates from a line geometry. + + The line geometry. + The coordinates. + is not a line geometry. + + + + Extracts coordinates from an array of instances of arrays of instances of the struct. + + The position array. + The coordinates. + + + + Extracts coordinates from an instance of the class. + + The polygon. + The coordinates. + + + + Extracts coordinates from a polygon geometry. + + The polygon geometry. + The coordinates. + is not a polygon geometry. + + + + Represents a context used in map view generators. + + + + + Whether to use continuous color. + + + + + The color scheme. + + + + + The border color scheme. + + + + + The text color scheme. + + + + + Specifies what colors of the element are to be set. + + + + + None. + + + + + Fill color. + + + + + Border color. + + + + + Text color. + + + + + A map element. + + + + + The maximum scale of the map beyond which the element no longer keeps its stroke width, but instead scales its strokes with the scale of the map. + + + + + Sets the color of the element based on a map generator context and a property. + + The map generator context. + The type of the property. + The value of the property. + A mask that specifies what colors of the element are to be set. + The current instance. + + + + Sets the color of the element based on a map generator context and a set of properties. + + The map generator context. + The properties. + A mask that specifies what colors of the element are to be set. + The current instance. + + + + A map element that groups a collection of children map elements. + + + + + The children map elements. + + + + + A group element that masks its children with specified masks. + + The masks. + + + + A group element that masks its children with specified masks. + + The masks. + + + The masks. + + + + A group element that represents an ongoing event. + + The blinking period of the elements in seconds. + + + + A group element that represents an ongoing event. + + The blinking period of the elements in seconds. + + + The blinking period of the elements in seconds. + + + + A map element that represents a hypocenter. + + The location of the hypocenter. + + + + A map element that represents a hypocenter. + + The location of the hypocenter. + + + The location of the hypocenter. + + + + The fill color. + + + + + The border color. + + + + + Whether the hypocenter is of low quality. + + + + + The size of the hypocenter icon. + + + + + The width of the hypocenter icon. + + + + + The stroke width of the hypocenter icon. + + + + + A map element that represents the tsunami height at a location. + + The location. + The tsunami height. + + + + A map element that represents the tsunami height at a location. + + The location. + The tsunami height. + + + The location. + + + The tsunami height. + + + + The fill color. + + + + + The border color. + + + + + Whether the tsunami is rising. + + + + + Whether the tsunami is out of the instrumental range. + + + + + Whether the tsunami height data is missing. + + + + + The width of the tsunami height bar. + + + + + The stroke width of the tsunami height bar. + + + + + A map element that represents a set of seismic wave circles of an earthquake. + + The location of the hypocenter. + The origin time of the earthquake in UTC. + The hypocenter depth. + + + + A map element that represents a set of seismic wave circles of an earthquake. + + The location of the hypocenter. + The origin time of the earthquake in UTC. + The hypocenter depth. + + + The location of the hypocenter. + + + The origin time of the earthquake in UTC. + + + The hypocenter depth. + + + + The time when the earthquake is reported in UTC. + + + + + The stroke width of the wave circles. + + + + + A map element that represents a point. + + The location of the point. + + + + A map element that represents a point. + + The location of the point. + + + The location of the point. + + + + The fill color. + + + + + The size of the point. + + + + + A map element that represents a labeled point. + + The location of the point. + The text of the label. + + + + A map element that represents a labeled point. + + The location of the point. + The text of the label. + + + The location of the point. + + + The text of the label. + + + + The fill color. + + + + + The border color. + + + + + The text color. + + + + + Whether the label represents an area. + + + + + The size of the label. + + + + + A map element that represents multiple lines. + + The coordinates of the lines. + + + + A map element that represents multiple lines. + + The coordinates of the lines. + + + The coordinates of the lines. + + + + The border color. + + + + + The stroke width. + + + + + A map element that represents multiple polygons. + + The coordinates of the polygons. + + + + A map element that represents multiple polygons. + + The coordinates of the polygons. + + + The coordinates of the polygons. + + + + The fill color. + + + + + The border color. + + + + + Whether the element has an associated instance of the class. + + + + + The stroke width. + + + + diff --git a/Assets/Plugins/Cryville.EEW.Map.xml.meta b/Assets/Plugins/Cryville.EEW.Map.xml.meta new file mode 100644 index 0000000..aa67c4f --- /dev/null +++ b/Assets/Plugins/Cryville.EEW.Map.xml.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 820a2693c7e103c43af26b094a956cb2 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Cryville.EEW.NOAA.Map.dll b/Assets/Plugins/Cryville.EEW.NOAA.Map.dll new file mode 100644 index 0000000..1f5ccfd Binary files /dev/null and b/Assets/Plugins/Cryville.EEW.NOAA.Map.dll differ diff --git a/Assets/Plugins/Cryville.EEW.NOAA.Map.dll.meta b/Assets/Plugins/Cryville.EEW.NOAA.Map.dll.meta new file mode 100644 index 0000000..1e34c3a --- /dev/null +++ b/Assets/Plugins/Cryville.EEW.NOAA.Map.dll.meta @@ -0,0 +1,33 @@ +fileFormatVersion: 2 +guid: 4fcfc3dc0a31ea04983884e1e8bcccf2 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Cryville.EEW.NOAA.TTS.dll b/Assets/Plugins/Cryville.EEW.NOAA.TTS.dll new file mode 100644 index 0000000..67574dc Binary files /dev/null and b/Assets/Plugins/Cryville.EEW.NOAA.TTS.dll differ diff --git a/Assets/Plugins/Cryville.EEW.NOAA.TTS.dll.meta b/Assets/Plugins/Cryville.EEW.NOAA.TTS.dll.meta new file mode 100644 index 0000000..343881c --- /dev/null +++ b/Assets/Plugins/Cryville.EEW.NOAA.TTS.dll.meta @@ -0,0 +1,33 @@ +fileFormatVersion: 2 +guid: 90a5b2472a884a34f82507992fd5150e +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Cryville.EEW.NOAA.dll b/Assets/Plugins/Cryville.EEW.NOAA.dll new file mode 100644 index 0000000..c46a950 Binary files /dev/null and b/Assets/Plugins/Cryville.EEW.NOAA.dll differ diff --git a/Assets/Plugins/Cryville.EEW.NOAA.dll.meta b/Assets/Plugins/Cryville.EEW.NOAA.dll.meta new file mode 100644 index 0000000..64153fa --- /dev/null +++ b/Assets/Plugins/Cryville.EEW.NOAA.dll.meta @@ -0,0 +1,33 @@ +fileFormatVersion: 2 +guid: b1c839d949ce2da439891095080d63b2 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Cryville.EEW.TTS.dll b/Assets/Plugins/Cryville.EEW.TTS.dll new file mode 100644 index 0000000..7d34d8a Binary files /dev/null and b/Assets/Plugins/Cryville.EEW.TTS.dll differ diff --git a/Assets/Plugins/Cryville.EEW.TTS.dll.meta b/Assets/Plugins/Cryville.EEW.TTS.dll.meta new file mode 100644 index 0000000..957d84b --- /dev/null +++ b/Assets/Plugins/Cryville.EEW.TTS.dll.meta @@ -0,0 +1,33 @@ +fileFormatVersion: 2 +guid: 7efa0f11f5c0fc346b8d22f2463f6a3b +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Cryville.EEW.TTS.xml b/Assets/Plugins/Cryville.EEW.TTS.xml new file mode 100644 index 0000000..39db81b --- /dev/null +++ b/Assets/Plugins/Cryville.EEW.TTS.xml @@ -0,0 +1,108 @@ + + + + Cryville.EEW.TTS + + + + + An empty . + + + + + The shared instance of the class. + + + + + + + + + + + Represents a context used in TTS message generators. + + + + + The location converter. + + + + + The delay tolerance before a nowcast warning event cannot trigger sounds and TTS. + + + + + Represents an entry sent to a TTS worker. + + The locale of the content. + The title of the entry, if non-, used when the entry is being repeated after interrupted; if the entry should not be repeated after interrupted. + The content to be spoken. + The priority (a lower number indicates higher priority). + The sound to be played. + Whether the entry is interrupted and to be repeated. + + + + Represents an entry sent to a TTS worker. + + The locale of the content. + The title of the entry, if non-, used when the entry is being repeated after interrupted; if the entry should not be repeated after interrupted. + The content to be spoken. + The priority (a lower number indicates higher priority). + The sound to be played. + Whether the entry is interrupted and to be repeated. + + + The locale of the content. + + + The title of the entry, if non-, used when the entry is being repeated after interrupted; if the entry should not be repeated after interrupted. + + + The content to be spoken. + + + Whether the entry is interrupted and to be repeated. + + + + The priority (a lower number indicates higher priority). + + + + + Copied from . + + + + + Copied from . + + + + + The sound to be played. + + + + + The TTS entry to be inserted into the queue before this TTS entry is inserted. + + + + + The TTS entry to be inserted into the queue when this TTS entry starts being spoken. + + + + + The time when the entry is created. + + + + diff --git a/Assets/Plugins/Cryville.EEW.TTS.xml.meta b/Assets/Plugins/Cryville.EEW.TTS.xml.meta new file mode 100644 index 0000000..39c7bc1 --- /dev/null +++ b/Assets/Plugins/Cryville.EEW.TTS.xml.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 2ee4135716a88ba408f4e01ee1308c38 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Cryville.EEW.UpdateChecker.dll b/Assets/Plugins/Cryville.EEW.UpdateChecker.dll new file mode 100644 index 0000000..7e88cfe Binary files /dev/null and b/Assets/Plugins/Cryville.EEW.UpdateChecker.dll differ diff --git a/Assets/Plugins/Cryville.EEW.UpdateChecker.dll.meta b/Assets/Plugins/Cryville.EEW.UpdateChecker.dll.meta new file mode 100644 index 0000000..211247a --- /dev/null +++ b/Assets/Plugins/Cryville.EEW.UpdateChecker.dll.meta @@ -0,0 +1,33 @@ +fileFormatVersion: 2 +guid: 67c5e2d3442a9464da8de406a3bea9ce +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Cryville.EEW.Wolfx.Map.dll b/Assets/Plugins/Cryville.EEW.Wolfx.Map.dll new file mode 100644 index 0000000..fc8d7cc Binary files /dev/null and b/Assets/Plugins/Cryville.EEW.Wolfx.Map.dll differ diff --git a/Assets/Plugins/Cryville.EEW.Wolfx.Map.dll.meta b/Assets/Plugins/Cryville.EEW.Wolfx.Map.dll.meta new file mode 100644 index 0000000..46ce9e2 --- /dev/null +++ b/Assets/Plugins/Cryville.EEW.Wolfx.Map.dll.meta @@ -0,0 +1,33 @@ +fileFormatVersion: 2 +guid: 41e0805cd4fddbf43880c93617aca262 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Cryville.EEW.Wolfx.TTS.dll b/Assets/Plugins/Cryville.EEW.Wolfx.TTS.dll new file mode 100644 index 0000000..6807390 Binary files /dev/null and b/Assets/Plugins/Cryville.EEW.Wolfx.TTS.dll differ diff --git a/Assets/Plugins/Cryville.EEW.Wolfx.TTS.dll.meta b/Assets/Plugins/Cryville.EEW.Wolfx.TTS.dll.meta new file mode 100644 index 0000000..9563f1c --- /dev/null +++ b/Assets/Plugins/Cryville.EEW.Wolfx.TTS.dll.meta @@ -0,0 +1,33 @@ +fileFormatVersion: 2 +guid: 497c8fa1478bbd34fa98b116a53f616f +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Cryville.EEW.Wolfx.dll b/Assets/Plugins/Cryville.EEW.Wolfx.dll new file mode 100644 index 0000000..a2b8fe7 Binary files /dev/null and b/Assets/Plugins/Cryville.EEW.Wolfx.dll differ diff --git a/Assets/Plugins/Cryville.EEW.Wolfx.dll.meta b/Assets/Plugins/Cryville.EEW.Wolfx.dll.meta new file mode 100644 index 0000000..83d0ea2 --- /dev/null +++ b/Assets/Plugins/Cryville.EEW.Wolfx.dll.meta @@ -0,0 +1,33 @@ +fileFormatVersion: 2 +guid: 8ed7a656400c46843be88b39d58b683d +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Cryville.EEW.dll b/Assets/Plugins/Cryville.EEW.dll new file mode 100644 index 0000000..408b5a1 Binary files /dev/null and b/Assets/Plugins/Cryville.EEW.dll differ diff --git a/Assets/Plugins/Cryville.EEW.dll.meta b/Assets/Plugins/Cryville.EEW.dll.meta new file mode 100644 index 0000000..dc7ee76 --- /dev/null +++ b/Assets/Plugins/Cryville.EEW.dll.meta @@ -0,0 +1,33 @@ +fileFormatVersion: 2 +guid: 936199e83371de147977e6665baabde8 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Cryville.EEW.xml b/Assets/Plugins/Cryville.EEW.xml new file mode 100644 index 0000000..28f1285 --- /dev/null +++ b/Assets/Plugins/Cryville.EEW.xml @@ -0,0 +1,1492 @@ + + + + Cryville.EEW + + + + + A helper class that produces dynamic delay values. + + + + + The current phase. + + + + + Creates an instance of the class. + + The minimum delay. + The maximum delay. + The multiplier between adjacent delay values. + is negative or zero. -or- is negative or zero. -or- is less than or equal to 1. + + + + Increments the current phase by the specified amount. + + The amount of phase to increment. + The next delay value. + + + + An empty . + + + + + The shared instance of the class. + + + + + + + + Provides utility methods related to geography. + + + + + Gets the great circle distance between two locations. + + The latitude of the first location. + The longitude of the first location. + The latitude of the second location. + The longitude of the second location. + The great circle distance between the two locations in radians. + + + + Represents the method that will handle an event when the event provides data. + + The type of the event data. + The source of the event. + The event data. + + + + Represents a heartbeat event. + + + + + The shared instance of the class. + + + + + A source worker that pulls events with HTTP GET requests. + + The base URI of the source. + + + + A source worker that pulls events with HTTP GET requests. + + The base URI of the source. + + + + The HTTP client that interacts with the source. + + + + + The base URI. + + + + + The default pulling period. + + + + + + + + + + + Runs the worker. + + A cancellation token. + The task. + The server responses with an unhandled status code. + + + + Gets the URI of the next request, usually based on . + + The URI of the next request. + + If not overridden, the request URI is always . + + + + + Called when a response is handled successfully, or when the server reponses with No Content (204) or Not Modified (304). + + + + + Handles a response. + + The stream that contains the content of the response. + The response headers. + A cancellation token. + The task. + + + + Called when a response is received. + + + + + Called when an error occurs. + + The exception. + + + + Represents a generator that generates objects of a specific type from input objects. + + The type of the generated objects. + + + + Generates the object. + + The input object. + The preferred culture of the generated object. When the method returns, set to the actual culture of the generated object. + The generated object. + + + + Represents a generator that generates objects of a specific type from input objects of another specific type. + + The type of the input objects. + The type of the generated objects. + + + + Generates the object. + + The input object. + The preferred culture of the generated object. When the method returns, set to the actual culture of the generated object. + The generated object. + + + + Represents a generator that generates objects of a specific type from input objects, with contexts. + + The type of the context. + The type of the generated objects. + + + + Generates the object. + + The input object. + The context. + The preferred culture of the generated object. When the method returns, set to the actual culture of the generated object. + The generated object. + + + + Represents a generator that generates objects of a specific type from input objects of another specific type, with contexts. + + The type of the input objects. + The type of the context. + The type of the generated objects. + + + + Generates the object. + + The input object. + The context. + The preferred culture of the generated object. When the method returns, set to the actual culture of the generated object. + The generated object. + + + + Represents a converter that converts a named location to a name in a specified culture. + + + + + Converts a named location to a name in a specified culture. + + The named location. + The preferred culture of the name. When the method returns, set to the actual culture of the name. + The converted name. + + + + Represents a worker that gets events from a source. + + + + + Gets a human-readable name of the event source. + + The preferred culture of the name. When the method returns, set to the actual culture of the name. + + It is recommended to get the name from a . + + + + + Raised for each event received. + + + + + Raised when the worker reports itself working normally. + + + + + Raised when an error occurs in the worker. + + + + + Runs the worker. + + A cancellation token. + The task. + + + + Represents a worker that gets events from a source. + + The type of the events. + + + + Raised for each event received. + + + + + Represents access to a localized resource set. + + + + + The root message string set of the resource. + + + + + Creates a new instance of the struct. + + The name of the localized resource. + The preferred culture of the resource. + The resources have not been initialized yet. + + + + Creates a new instance of the struct. + + The name of the localized resource. + The preferred culture of the resource. When the constructor returns, set to the actual culture of the resource. + The resources have not been initialized yet. + + + + + + + Represents access to a string set in a localized resource. + + + + + Gets a string in the string set. + + The name of the string. + The string of the specified name in the string set, or if not found. + + + + Gets a string set in the string set. + + The name of the string set. + The string set of the specified name in the string set, or if not found. + + + + Represents a manager where localized resources are retrieved. + + + + + Gets a root string set. + + The name of the assembly. + The name of the resource. + The preferred culture of the resource. When the method returns, set to the actual culture of the resource. + The root string set of the specified namespace. + + + + Provides a set of methods related to . + + + + + Gets a string in the string set. + + The string set. + The name of the string. + The string of the specified name in the resource. + The string of the specified name is not found. + + + + Gets a string set in the string set. + + The string set. + The name of the string set. + The string set of the specified name in the string set. + The string set of the specified name is not found. + + + + An Atom Feed Document, acting as a container for metadata and data associated with the feed. + + + + + A human-readable title for the feed. + + + + + A human-readable description or subtitle for the feed. + + + + + A permanent, universally unique identifier for the feed. + + + + + The most recent instant in time when the feed was modified in a way the publisher considers significant. + + + + + The authors of the feed. + + + + + References from the feed to Web resources. + + + + + Individual entries of the feed. + + + + + A person, corporation, or similar entity. + + + + + A human-readable name for the person. + + + + + + + + A reference from an entry or feed to a Web resource. + + + + + The link's IRI. + + + + + The link relation type. + + + + + An advisory media type: a hint about the type of the representation that is expected to be returned when the value of the attribute is dereferenced. + + + + + The language of the resource pointed to by the attribute. + + + + + Human-readable information about the link. + + + + + An advisory length of the linked content in octets; a hint about the content length of the representation returned when the IRI in the attribute is mapped to a URI and dereferenced. + + + + + + + + An individual entry, acting as a container for metadata and data associated with the entry. + + + + + A human-readable title for the entry. + + + + + A permanent, universally unique identifier for the entry. + + + + + The most recent instant in time when the entry was modified in a way the publisher considers significant. + + + + + The authors of the entry. + + + + + References from the entry to Web resources. + + + + + The content of the entry. + + + + + + + + The content of an entry. + + + + + One of "text", "html", or "xhtml", or a MIME media type (except a composite type). + + + + + An IRI reference to the source. + + + + + The content. + + + + + + + + Represents a spatially bounded thing. + + A JSON string or number representing the commonly used identifier of the feature. + The geometry of the feature. + The properties of the feature. + The bounding box. + + + + Represents a spatially bounded thing. + + A JSON string or number representing the commonly used identifier of the feature. + The geometry of the feature. + The properties of the feature. + The bounding box. + + + A JSON string or number representing the commonly used identifier of the feature. + + + The geometry of the feature. + + + The properties of the feature. + + + + Represents a feature collection. + + The features. + The bounding box. + + + + Represents a feature collection. + + The features. + The bounding box. + + + The features. + + + + A Geometry, Feature, or collection of Features. + + The bounding box. + + + + A Geometry, Feature, or collection of Features. + + The bounding box. + + + The bounding box. + + + + Other members in the GeoJSON object. + + + + + Points, curves, and surfaces in coordinate space. + + The bounding box. + + + + Points, curves, and surfaces in coordinate space. + + The bounding box. + + + + Represents a point. + + The coordinates, a single position. + The bounding box. + + + + Represents a point. + + The coordinates, a single position. + The bounding box. + + + The coordinates, a single position. + + + + Represents multiple points. + + The coordinates, an array of positions. + The bounding box. + + + + Represents multiple points. + + The coordinates, an array of positions. + The bounding box. + + + The coordinates, an array of positions. + + + + Represents a line string. + + The coordinates, an array of two or more positions. + The bounding box. + + + + Represents a line string. + + The coordinates, an array of two or more positions. + The bounding box. + + + The coordinates, an array of two or more positions. + + + + Represents multiple line strings. + + The coordinates, an array of arrays. + The bounding box. + + + + Represents multiple line strings. + + The coordinates, an array of arrays. + The bounding box. + + + The coordinates, an array of arrays. + + + + Represents a polygon. + + The coordinates, an array of linear ring coordinate arrays. + The bounding box. + + + + Represents a polygon. + + The coordinates, an array of linear ring coordinate arrays. + The bounding box. + + + The coordinates, an array of linear ring coordinate arrays. + + + + Represents multiple polygons. + + The coordinates, an array of arrays. + The bounding box. + + + + Represents multiple polygons. + + The coordinates, an array of arrays. + The bounding box. + + + The coordinates, an array of arrays. + + + + Represents a geometry collection. + + An array of objects. + The bounding box. + + + + Represents a geometry collection. + + An array of objects. + The bounding box. + + + An array of objects. + + + + The fundamental geometry construct. + + The longitude or easting. + The latitude or northing. + The altitude or elevation. + + + + The fundamental geometry construct. + + The longitude or easting. + The latitude or northing. + The altitude or elevation. + + + The longitude or easting. + + + The latitude or northing. + + + The altitude or elevation. + + + + Converts instances of the struct to or from JSON. + + + + + + + + + + + A serialized in XML. + + + + + The date time offset value. + + + + + Creates an instance of the struct. + + The date time offset value. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Converts an instance of the struct to an instance of the struct. + + An instance of the struct. + An instance of the struct. + + + + Converts an instance of the struct to an instance of the struct. + + An instance of the struct. + + + + Converts the current instance to an instance of the struct. + + An instance of the struct. + + + + Converts an instance of the struct to an instance of the struct. + + An instance of the struct. + + + + Represents a named location. + + + + + The source name of the location. + + + + + The source culture of . + + + + + The latitude of the location. + + + + + The longitude of the location. + + + + + Represents a named location. + + The source name of the location. + The source culture of . + The latitude of the location. + The longitude of the location. + + + + Represents a named location. + + The source name of the location. + The source culture of . + The latitude of the location. + The longitude of the location. + + + The source name of the location. + + + The source culture of . + + + The latitude of the location. + + + The longitude of the location. + + + + An empty . + + + + + The shared instance of the class. + + + + + + + + An empty that always returns -1. + + + + + The shared instance of the class. + + + + + + + + A group key based on hypocenter. + + The latitude of the hypocenter. + The longitude of the hypocenter. + The origin date time. + The magnitude. + + + + A group key based on hypocenter. + + The latitude of the hypocenter. + The longitude of the hypocenter. + The origin date time. + The magnitude. + + + The latitude of the hypocenter. + + + The longitude of the hypocenter. + + + The origin date time. + + + The magnitude. + + + + + + + + + + + + + Represents a key for grouping reports. + + + + + Represents a sortable report group key. + + + + + Compares the group key with another group key and returns an integer that indicates whether the current group key precedes, follows, or occurs in the same position in the sort order as the other group key. + + The other group key. + A value that indicates the relative order of the group keys being compared. Negative if the current group key precedes , zero if they occurs in the same position, or positive if the current group key follows . + + For any group key, among a list where all the group keys are sorted with this method, there must be at most one consecutive subsequence where all the groups keys pre-match with that group key, and all the other group keys in the list must not pre-match with that group key. + + + + + Pre-matches against another group key. + + The other group key. + Whether the two group keys pre-match, to potentially actually match. + + Implement this method so that it returns only based on the conditions used in . For example, if only takes the event time into account, then implement this method so that it also only takes the event time into account, returns if the two group keys potentially match, and returns if they can never match. + Among a list where all the group keys are sorted with , there must be at most one consecutive subsequence where all the groups keys pre-match with this group key, and all the other group keys in the list must not pre-match with this group key. + + + + + Matches against another group key. + + The other group key. + Whether the two group keys match. + + Report groups with any matching group keys are grouped together. + + + + + Represents a key identifying the revision of a report. + + + Implement to determine the precedence of the revision keys. By default, the precedence is determined by the following logic. + + Revision keys with being is the latest revision. + Otherwise, revision keys with a non- is the latest revision. + Otherwise, revision keys with a greater is the latest revision. + + + + + + The serial number of the revision. + + + + + Whether the revision is the final revision. + + + + + Whether the revision is for cancellation. + + + + + Determines whether the revision key is comparable with the specified revision key. + + The other revision key. + Whether the revision key is comparable with the specified revision key. + + + + Represents a key for identifying report units. + + + + + Determines whether the report of the current unit key is covered by another report. + + The unit key of the other report. + Whether the report of the current unit key is covered by the other report. + + + + Represents a context used in report view model generators. + + + + + The severity scheme. + + + + + Represents a severity scheme, extracting severity values from different properties. + + + Severity values are defined based on the human perception of a specific property. When a property is not directly linked to human perception, a relative value based on mean conditions is used. + + 0.00Not perceivable by human and only detected by instruments; very light + 0.50Slightly perceived by human; light + 0.75Perceived by human; moderate + 1.00Strongly perceived by human; heavy + 1.25Violently perceived by human; disastrous; extreme + + + + + + Extracts a severity value from a property. + + The type of the property. + The value of the property. + The severity value. + + + + Extracts a severity value from a set properties. + + The properties. + The severity value. + + + + A utility list that caches the states of the report units. + + + + + The maximum time for the report units to stay alive in the list. + + + + + Pushes the states of a report unit into the list. + + The ID of the report unit. + The states. + The result of the push. + The length of mismatches with the length of the states pushed last time. + + + + Manually remove a report unit from the list. + + The ID of the report unit. + Whether the report unit is removed successfully. + + + + The result of a push action to an instance of the class. + + + + + Whether the push updates the maximum states. + + + + + Whether the push adds a new report unit into the list. + + + + + The current maximum states. + + + + + Represents a report of an event. + + + + + The title of the report. + + + + + The source of the report. + + + + + The location of the event. + + + + + The specificity of the location described by . + + + This value conforms to the values of the admin_level key in OpenStreetMap, with the following extented values. + + 0Unknown specificity or unknown location + 12A specific point that is inside the smallest possible local administrative region + + Use the value 3 for a location that conforms to F-E regionalization. + + + + + The predicate of the report. + + + + + The time of the event, in the time zone indicated by . + + + + + The time when the report is to be invalidated, in the time zone indicated by . + + + + + The time zone of the source. + + + + + converted to UTC. + + + + + converted to UTC. + + + + + The time when the report is issued, in the time zone indicated by . + + + + + The time when the report is issued, in UTC. + + + + + The properties of the event. + + + + + Whether the report should be excluded from the history list. + + + + + The group keys of the report. + + + + + The unit keys of the report. + + + This collection is read-only. Add unit keys by calling the method on . + + + + + The revision key of the report. + + + + + The culture of the report. + + + + + The original data model of the report. + + + It is not necessary to set this property in the generator if the model is the input model. + + + + + Represents a report view model property. + + The type. + The name. + The value. + The severity + + + + Represents a report view model property. + + The type. + The name. + The value. + The severity + + + The type. + + + The name. + + + The value. + + + The severity + + + + Creates an instance of the class. + + The type. + The name. + The value. + The severity scheme. + The raw value. + + + + The additional condition. + + + + + The accuracy of the value. + + + This value conforms to the following definitions. + + 0~19 (10 by default)Strict (observed or derived from observed data strictly based on the definition), reviewed + 20~39 (30 by default)Strict (observed or derived from observed data strictly based on the definition), automatic + 40~59 (50 by default)Estimated (estimated from observed data of the same type) + 60~79 (70 by default)Forecast (estimated from observed data of different types) + 80~99 (90 by default)Unofficial + 100Unknown + + The default value is 10. + + + + + Represents a type of report view model property. + + + + + The name of the type. + + + + + The parent type. + + + + + Creates an instance of the class. + + The name of the type. + The parent type. + contains the sub-type delimiter :. + + + + Creates a sub-type from this type. + + The name of the sub-type. + The created sub-type. + + + + + + + Creates a report view model property type from a string. + + The name of the type. + The created type. + + + + Converts a string to a report view model property type. + + The value. + + + + Shared cultures. + + + + + The culture en-US. + + + + + The culture ja-JP. + + + + + The culture zh-CN. + + + + + The culture zh-TW. + + + + + Gets a culture of the specified name. + + The name of the culture. + The culture of the specified name. + + + + Shared settings. + + + + + A UTF-8 encoding without BOM. + + + + + The shared user agent to be sent in Web requests. + + + + + The shared JSON serializer options. + + + + + The shared XML reader settings. + + + + + Shared time zones. + + + + + China Standard Time. + + + + + Taipei Standard Time. + + + + + Tokyo Standard Tim. + + + + + Gets a time zone. + + The ID of the time zone. + The time zone offset to be used as a fallback when is not found. + + + + + Converts a time zone to a string representation. + + The time zone to be converted. + A string representation of the time zone. + + + + Thrown when a network error occurs in a source worker. + + + When this exception is thrown, the source worker is considered disconnected until is raised. + + + + + + + + + + + + + + A source worker that pulls events with WebSocket. + + + + + A source worker that pulls events with WebSocket. + + + + + + + + + + + Runs the worker. + + A cancellation token. + The task. + + + + Handles a response. + + The stream that contains the content of the response. + A cancellation token. + The task. + + + + Called when a response is received. + + + + + Called when an error occurs. + + The exception. + + + diff --git a/Assets/Plugins/Cryville.EEW.xml.meta b/Assets/Plugins/Cryville.EEW.xml.meta new file mode 100644 index 0000000..39992c1 --- /dev/null +++ b/Assets/Plugins/Cryville.EEW.xml.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: e224561547b6abe4787b83254cae3365 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Cryville.Interop.Java.ObjectStream.dll b/Assets/Plugins/Cryville.Interop.Java.ObjectStream.dll new file mode 100644 index 0000000..73340f2 Binary files /dev/null and b/Assets/Plugins/Cryville.Interop.Java.ObjectStream.dll differ diff --git a/Assets/Plugins/Cryville.Interop.Java.ObjectStream.dll.meta b/Assets/Plugins/Cryville.Interop.Java.ObjectStream.dll.meta new file mode 100644 index 0000000..a3a0ea4 --- /dev/null +++ b/Assets/Plugins/Cryville.Interop.Java.ObjectStream.dll.meta @@ -0,0 +1,33 @@ +fileFormatVersion: 2 +guid: 3b1a7e28de759e547b71398743504685 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Microsoft.Bcl.AsyncInterfaces.dll b/Assets/Plugins/Microsoft.Bcl.AsyncInterfaces.dll new file mode 100644 index 0000000..421e812 Binary files /dev/null and b/Assets/Plugins/Microsoft.Bcl.AsyncInterfaces.dll differ diff --git a/Assets/Plugins/Microsoft.Bcl.AsyncInterfaces.dll.meta b/Assets/Plugins/Microsoft.Bcl.AsyncInterfaces.dll.meta new file mode 100644 index 0000000..85031b3 --- /dev/null +++ b/Assets/Plugins/Microsoft.Bcl.AsyncInterfaces.dll.meta @@ -0,0 +1,33 @@ +fileFormatVersion: 2 +guid: 4d65961ff98876848b721ae45e26df69 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NVorbis.dll b/Assets/Plugins/NVorbis.dll new file mode 100644 index 0000000..5bb6e6f Binary files /dev/null and b/Assets/Plugins/NVorbis.dll differ diff --git a/Assets/Plugins/NVorbis.dll.meta b/Assets/Plugins/NVorbis.dll.meta new file mode 100644 index 0000000..b1f295d --- /dev/null +++ b/Assets/Plugins/NVorbis.dll.meta @@ -0,0 +1,33 @@ +fileFormatVersion: 2 +guid: 672dd88885aec084f93454215372b5f0 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Poly2Tri.meta b/Assets/Plugins/Poly2Tri.meta new file mode 100644 index 0000000..1430cb6 --- /dev/null +++ b/Assets/Plugins/Poly2Tri.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 06da683bcda72dc4e83457b5147e9e58 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Poly2Tri/AUTHORS.txt b/Assets/Plugins/Poly2Tri/AUTHORS.txt new file mode 100644 index 0000000..41a48b9 --- /dev/null +++ b/Assets/Plugins/Poly2Tri/AUTHORS.txt @@ -0,0 +1,9 @@ +Primary Contributors: + + Mason Green (C++, Python) + Thomas Åhlén (Java) + +Other Contributors: + + Michael Rickert (C#) + Lee Wilson (C#) diff --git a/Assets/Plugins/Poly2Tri/AUTHORS.txt.meta b/Assets/Plugins/Poly2Tri/AUTHORS.txt.meta new file mode 100644 index 0000000..da5a6da --- /dev/null +++ b/Assets/Plugins/Poly2Tri/AUTHORS.txt.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: f8915cc67e651c44da46d4406ac14831 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Poly2Tri/LICENSE.txt b/Assets/Plugins/Poly2Tri/LICENSE.txt new file mode 100644 index 0000000..2239078 --- /dev/null +++ b/Assets/Plugins/Poly2Tri/LICENSE.txt @@ -0,0 +1,123 @@ +Poly2Tri Copyright (c) 2009-2011, Poly2Tri Contributors +http://code.google.com/p/poly2tri/ + +All rights reserved. +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. +* Neither the name of Poly2Tri nor the names of its contributors may be + used to endorse or promote products derived from this software without specific + prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +------------------------------------------------------------------------------ + +The Following notice applies to the Methods SplitComplexPolygon and the +class SplitComplexPolygonNode in Triangulation/Polygon/PolygonUtil.cs. +Both are altered only enough to convert to C# +and take advantage of some of C#'s language features. Any errors +are thus mine from the conversion and not Eric's. + +Copyright (c) 2007 Eric Jordan + +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. + +------------------------------------------------------------------------------ + +Portions of the this code (notably: the methods PolygonUnion, +PolygonSubtract, PolygonIntersect, PolygonOperationContext.Init, +PolygonOperationContext.VerticesIntersect, +PolygonOperationContext.PointInPolygonAngle, and +PolygonOperationContext.VectorAngle in the file +Triangulation/Polygon/PolygonUtil.cs are from the Farseer Physics Engine 3.0 +and are covered under the Microsoft Permissive License V1.1 +(http://farseerphysics.codeplex.com/license) + +Microsoft Permissive License (Ms-PL) + +This license governs use of the accompanying software. If you use the +software, you accept this license. If you do not accept the license, do not +use the software. + +1. Definitions + +The terms "reproduce," "reproduction," "derivative works," and +"distribution" have the same meaning here as under U.S. copyright law. + +A "contribution" is the original software, or any additions or changes to +the software. + +A "contributor" is any person that distributes its contribution under this +license. + +"Licensed patents" are a contributor's patent claims that read directly on +its contribution. + +2. Grant of Rights + +(A) Copyright Grant- Subject to the terms of this license, including the +license conditions and limitations in section 3, each contributor grants +you a non-exclusive, worldwide, royalty-free copyright license to reproduce +its contribution, prepare derivative works of its contribution, and +distribute its contribution or any derivative works that you create. + +(B) Patent Grant- Subject to the terms of this license, including the +license conditions and limitations in section 3, each contributor grants +you a non-exclusive, worldwide, royalty-free license under its licensed +patents to make, have made, use, sell, offer for sale, import, and/or +otherwise dispose of its contribution in the software or derivative works +of the contribution in the software. + +3. Conditions and Limitations + +(A) No Trademark License- This license does not grant you rights to use +any contributors' name, logo, or trademarks. + +(B) If you bring a patent claim against any contributor over patents that +you claim are infringed by the software, your patent license from such +contributor to the software ends automatically. + +(C) If you distribute any portion of the software, you must retain all +copyright, patent, trademark, and attribution notices that are present +in the software. + +(D) If you distribute any portion of the software in source code form, you +may do so only under this license by including a complete copy of this +license with your distribution. If you distribute any portion of the +software in compiled or object code form, you may only do so under a +license that complies with this license. + +(E) The software is licensed "as-is." You bear the risk of using it. The +contributors give no express warranties, guarantees or conditions. You may +have additional consumer rights under your local laws which this license +cannot change. To the extent permitted under your local laws, the +contributors exclude the implied warranties of merchantability, fitness for +a particular purpose and non-infringement. diff --git a/Assets/Plugins/Poly2Tri/LICENSE.txt.meta b/Assets/Plugins/Poly2Tri/LICENSE.txt.meta new file mode 100644 index 0000000..ba80904 --- /dev/null +++ b/Assets/Plugins/Poly2Tri/LICENSE.txt.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: ad85343b1a5acaa4d99ef62487bde508 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Poly2Tri/Poly2Tri.asmdef b/Assets/Plugins/Poly2Tri/Poly2Tri.asmdef new file mode 100644 index 0000000..7520838 --- /dev/null +++ b/Assets/Plugins/Poly2Tri/Poly2Tri.asmdef @@ -0,0 +1,14 @@ +{ + "name": "Poly2Tri", + "rootNamespace": "", + "references": [], + "includePlatforms": [], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": false, + "defineConstraints": [], + "versionDefines": [], + "noEngineReferences": true +} \ No newline at end of file diff --git a/Assets/Plugins/Poly2Tri/Poly2Tri.asmdef.meta b/Assets/Plugins/Poly2Tri/Poly2Tri.asmdef.meta new file mode 100644 index 0000000..093a3f7 --- /dev/null +++ b/Assets/Plugins/Poly2Tri/Poly2Tri.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: e5b7e7f40a80a814ba706299d68f9213 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Poly2Tri/Triangulation.meta b/Assets/Plugins/Poly2Tri/Triangulation.meta new file mode 100644 index 0000000..a9b75e4 --- /dev/null +++ b/Assets/Plugins/Poly2Tri/Triangulation.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a1df0a761a6faee41910a01a2901e475 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Poly2Tri/Triangulation/Delaunay.meta b/Assets/Plugins/Poly2Tri/Triangulation/Delaunay.meta new file mode 100644 index 0000000..910abd0 --- /dev/null +++ b/Assets/Plugins/Poly2Tri/Triangulation/Delaunay.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 24f46f7445d706343b6a44b48a6504cf +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Poly2Tri/Triangulation/Delaunay/DelaunayTriangle.cs b/Assets/Plugins/Poly2Tri/Triangulation/Delaunay/DelaunayTriangle.cs new file mode 100644 index 0000000..b7587d7 --- /dev/null +++ b/Assets/Plugins/Poly2Tri/Triangulation/Delaunay/DelaunayTriangle.cs @@ -0,0 +1,447 @@ +/* Poly2Tri + * Copyright (c) 2009-2010, Poly2Tri Contributors + * http://code.google.com/p/poly2tri/ + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of Poly2Tri nor the names of its contributors may be + * used to endorse or promote products derived from this software without specific + * prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/// Changes from the Java version +/// attributification +/// Future possibilities +/// Flattening out the number of indirections +/// Replacing arrays of 3 with fixed-length arrays? +/// Replacing bool[3] with a bit array of some sort? +/// Bundling everything into an AoS mess? +/// Hardcode them all as ABC ? + +using System; +using System.Diagnostics; +using System.Collections.Generic; + +namespace Poly2Tri +{ + public class DelaunayTriangle + { + + public FixedArray3 Points; + public FixedArray3 Neighbors; + private FixedBitArray3 mEdgeIsConstrained; + public FixedBitArray3 EdgeIsConstrained { get { return mEdgeIsConstrained; } } + public FixedBitArray3 EdgeIsDelaunay; + public bool IsInterior { get; set; } + + public DelaunayTriangle(TriangulationPoint p1, TriangulationPoint p2, TriangulationPoint p3) + { + Points[0] = p1; + Points[1] = p2; + Points[2] = p3; + } + + + public int IndexOf(TriangulationPoint p) + { + int i = Points.IndexOf(p); + if (i == -1) + { + throw new Exception("Calling index with a point that doesn't exist in triangle"); + } + + return i; + } + + + public int IndexCWFrom(TriangulationPoint p) + { + return (IndexOf(p) + 2) % 3; + } + + + public int IndexCCWFrom(TriangulationPoint p) + { + return (IndexOf(p) + 1) % 3; + } + + + public bool Contains(TriangulationPoint p) + { + return Points.Contains(p); + } + + + /// + /// Update neighbor pointers + /// + /// Point 1 of the shared edge + /// Point 2 of the shared edge + /// This triangle's new neighbor + private void MarkNeighbor(TriangulationPoint p1, TriangulationPoint p2, DelaunayTriangle t) + { + int i = EdgeIndex(p1, p2); + if (i == -1) + { + throw new Exception("Error marking neighbors -- t doesn't contain edge p1-p2!"); + } + Neighbors[i] = t; + } + + + /// + /// Exhaustive search to update neighbor pointers + /// + public void MarkNeighbor(DelaunayTriangle t) + { + // Points of this triangle also belonging to t + bool a = t.Contains(Points[0]); + bool b = t.Contains(Points[1]); + bool c = t.Contains(Points[2]); + + if (b && c) + { + Neighbors[0] = t; + t.MarkNeighbor(Points[1], Points[2], this); + } + else if (a && c) + { + Neighbors[1] = t; + t.MarkNeighbor(Points[0], Points[2], this); + } + else if (a && b) + { + Neighbors[2] = t; + t.MarkNeighbor(Points[0], Points[1], this); + } + else + { + throw new Exception("Failed to mark neighbor, doesn't share an edge!"); + } + } + + + public void ClearNeighbors() + { + Neighbors[0] = Neighbors[1] = Neighbors[2] = null; + } + + + public void ClearNeighbor(DelaunayTriangle triangle) + { + if (Neighbors[0] == triangle) + { + Neighbors[0] = null; + } + else if (Neighbors[1] == triangle) + { + Neighbors[1] = null; + } + else if( Neighbors[2] == triangle) + { + Neighbors[2] = null; + } + } + + /// + /// Clears all references to all other triangles and points + /// + public void Clear() + { + DelaunayTriangle t; + for (int i = 0; i < 3; i++) + { + t = Neighbors[i]; + if (t != null) + { + t.ClearNeighbor(this); + } + } + ClearNeighbors(); + Points[0] = Points[1] = Points[2] = null; + } + + /// Opposite triangle + /// The point in t that isn't shared between the triangles + public TriangulationPoint OppositePoint(DelaunayTriangle t, TriangulationPoint p) + { + Debug.Assert(t != this, "self-pointer error"); + return PointCWFrom(t.PointCWFrom(p)); + } + + + public DelaunayTriangle NeighborCWFrom(TriangulationPoint point) + { + return Neighbors[(Points.IndexOf(point) + 1) % 3]; + } + + + public DelaunayTriangle NeighborCCWFrom(TriangulationPoint point) + { + return Neighbors[(Points.IndexOf(point) + 2) % 3]; + } + + + public DelaunayTriangle NeighborAcrossFrom(TriangulationPoint point) + { + return Neighbors[Points.IndexOf(point)]; + } + + + public TriangulationPoint PointCCWFrom(TriangulationPoint point) + { + return Points[(IndexOf(point) + 1) % 3]; + } + + + public TriangulationPoint PointCWFrom(TriangulationPoint point) + { + return Points[(IndexOf(point) + 2) % 3]; + } + + + private void RotateCW() + { + var t = Points[2]; + Points[2] = Points[1]; + Points[1] = Points[0]; + Points[0] = t; + } + + + /// + /// Legalize triangle by rotating clockwise around oPoint + /// + /// The origin point to rotate around + /// ??? + public void Legalize(TriangulationPoint oPoint, TriangulationPoint nPoint) + { + RotateCW(); + Points[IndexCCWFrom(oPoint)] = nPoint; + } + + + public override string ToString() + { + return Points[0] + "," + Points[1] + "," + Points[2]; + } + + + /// + /// Finalize edge marking + /// + public void MarkNeighborEdges() + { + for (int i = 0; i < 3; i++) + { + if (EdgeIsConstrained[i] && Neighbors[i] != null) + { + Neighbors[i].MarkConstrainedEdge(Points[(i + 1) % 3], Points[(i + 2) % 3]); + } + } + } + + + public void MarkEdge(DelaunayTriangle triangle) + { + for (int i = 0; i < 3; i++) if (EdgeIsConstrained[i]) + { + triangle.MarkConstrainedEdge(Points[(i + 1) % 3], Points[(i + 2) % 3]); + } + } + + public void MarkEdge(List tList) + { + foreach (DelaunayTriangle t in tList) + { + for (int i = 0; i < 3; i++) + { + if (t.EdgeIsConstrained[i]) + { + MarkConstrainedEdge(t.Points[(i + 1) % 3], t.Points[(i + 2) % 3]); + } + } + } + } + + + public void MarkConstrainedEdge(int index) + { + mEdgeIsConstrained[index] = true; + } + + + public void MarkConstrainedEdge(DTSweepConstraint edge) + { + MarkConstrainedEdge(edge.P, edge.Q); + } + + + /// + /// Mark edge as constrained + /// + public void MarkConstrainedEdge(TriangulationPoint p, TriangulationPoint q) + { + int i = EdgeIndex(p, q); + if (i != -1) + { + mEdgeIsConstrained[i] = true; + } + } + + + public double Area() + { + double b = Points[0].X - Points[1].X; + double h = Points[2].Y - Points[1].Y; + + return Math.Abs((b * h * 0.5f)); + } + + public TriangulationPoint Centroid() + { + double cx = (Points[0].X + Points[1].X + Points[2].X) / 3f; + double cy = (Points[0].Y + Points[1].Y + Points[2].Y) / 3f; + return new TriangulationPoint(cx, cy); + } + + + /// + /// Get the index of the neighbor that shares this edge (or -1 if it isn't shared) + /// + /// index of the shared edge or -1 if edge isn't shared + public int EdgeIndex(TriangulationPoint p1, TriangulationPoint p2) + { + int i1 = Points.IndexOf(p1); + int i2 = Points.IndexOf(p2); + + // Points of this triangle in the edge p1-p2 + bool a = (i1 == 0 || i2 == 0); + bool b = (i1 == 1 || i2 == 1); + bool c = (i1 == 2 || i2 == 2); + + if (b && c) + { + return 0; + } + if (a && c) + { + return 1; + } + if (a && b) + { + return 2; + } + + return -1; + } + + + public bool GetConstrainedEdgeCCW(TriangulationPoint p) { return EdgeIsConstrained[(IndexOf(p) + 2) % 3]; } + public bool GetConstrainedEdgeCW(TriangulationPoint p) { return EdgeIsConstrained[(IndexOf(p) + 1) % 3]; } + public bool GetConstrainedEdgeAcross(TriangulationPoint p) { return EdgeIsConstrained[IndexOf(p)]; } + + protected void SetConstrainedEdge(int idx, bool ce) + { + //if (ce == false && EdgeIsConstrained[idx]) + //{ + // DTSweepConstraint edge = null; + // if (GetEdge(idx, out edge)) + // { + // Console.WriteLine("Removing pre-defined constraint from edge " + edge.ToString()); + // } + //} + mEdgeIsConstrained[idx] = ce; + } + public void SetConstrainedEdgeCCW(TriangulationPoint p, bool ce) + { + int idx = (IndexOf(p) + 2) % 3; + SetConstrainedEdge(idx, ce); + } + public void SetConstrainedEdgeCW(TriangulationPoint p, bool ce) + { + int idx = (IndexOf(p) + 1) % 3; + SetConstrainedEdge(idx, ce); + } + public void SetConstrainedEdgeAcross(TriangulationPoint p, bool ce) + { + int idx = IndexOf(p); + SetConstrainedEdge(idx, ce); + } + + public bool GetDelaunayEdgeCCW(TriangulationPoint p) { return EdgeIsDelaunay[(IndexOf(p) + 2) % 3]; } + public bool GetDelaunayEdgeCW(TriangulationPoint p) { return EdgeIsDelaunay[(IndexOf(p) + 1) % 3]; } + public bool GetDelaunayEdgeAcross(TriangulationPoint p) { return EdgeIsDelaunay[IndexOf(p)]; } + public void SetDelaunayEdgeCCW(TriangulationPoint p, bool ce) { EdgeIsDelaunay[(IndexOf(p) + 2) % 3] = ce; } + public void SetDelaunayEdgeCW(TriangulationPoint p, bool ce) { EdgeIsDelaunay[(IndexOf(p) + 1) % 3] = ce; } + public void SetDelaunayEdgeAcross(TriangulationPoint p, bool ce) { EdgeIsDelaunay[IndexOf(p)] = ce; } + + + public bool GetEdge(int idx, out DTSweepConstraint edge) + { + edge = null; + if (idx < 0 || idx > 2) + { + return false; + } + TriangulationPoint p1 = Points[(idx + 1) % 3]; + TriangulationPoint p2 = Points[(idx + 2) % 3]; + if (p1.GetEdge(p2, out edge)) + { + return true; + } + else if (p2.GetEdge(p1, out edge)) + { + return true; + } + + return false; + } + + + public bool GetEdgeCCW(TriangulationPoint p, out DTSweepConstraint edge) + { + int pointIndex = IndexOf(p); + int edgeIdx = (pointIndex + 2)%3; + + return GetEdge(edgeIdx, out edge); + } + + public bool GetEdgeCW(TriangulationPoint p, out DTSweepConstraint edge) + { + int pointIndex = IndexOf(p); + int edgeIdx = (pointIndex + 1) % 3; + + return GetEdge(edgeIdx, out edge); + } + + public bool GetEdgeAcross(TriangulationPoint p, out DTSweepConstraint edge) + { + int pointIndex = IndexOf(p); + int edgeIdx = pointIndex; + + return GetEdge(edgeIdx, out edge); + } + + } +} diff --git a/Assets/Plugins/Poly2Tri/Triangulation/Delaunay/DelaunayTriangle.cs.meta b/Assets/Plugins/Poly2Tri/Triangulation/Delaunay/DelaunayTriangle.cs.meta new file mode 100644 index 0000000..69af454 --- /dev/null +++ b/Assets/Plugins/Poly2Tri/Triangulation/Delaunay/DelaunayTriangle.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8b61ca8480a824b4eab0f5a7c6587932 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Poly2Tri/Triangulation/Delaunay/Sweep.meta b/Assets/Plugins/Poly2Tri/Triangulation/Delaunay/Sweep.meta new file mode 100644 index 0000000..984b5f1 --- /dev/null +++ b/Assets/Plugins/Poly2Tri/Triangulation/Delaunay/Sweep.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ca0c831d398dcf043875b7e514c4f9ee +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Poly2Tri/Triangulation/Delaunay/Sweep/AdvancingFront.cs b/Assets/Plugins/Poly2Tri/Triangulation/Delaunay/Sweep/AdvancingFront.cs new file mode 100644 index 0000000..c5e3ac3 --- /dev/null +++ b/Assets/Plugins/Poly2Tri/Triangulation/Delaunay/Sweep/AdvancingFront.cs @@ -0,0 +1,177 @@ +/* Poly2Tri + * Copyright (c) 2009-2010, Poly2Tri Contributors + * http://code.google.com/p/poly2tri/ + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of Poly2Tri nor the names of its contributors may be + * used to endorse or promote products derived from this software without specific + * prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/// Changes from the Java version +/// Removed BST code, but not all artifacts of it +/// Future possibilities +/// Eliminate Add/RemoveNode ? +/// Comments comments and more comments! + +using System.Text; +using System; + +namespace Poly2Tri +{ + /** + * @author Thomas Ã…hlen (thahlen@gmail.com) + */ + public class AdvancingFront + { + public AdvancingFrontNode Head; + public AdvancingFrontNode Tail; + protected AdvancingFrontNode Search; + + public AdvancingFront(AdvancingFrontNode head, AdvancingFrontNode tail) + { + this.Head = head; + this.Tail = tail; + this.Search = head; + AddNode(head); + AddNode(tail); + } + + public void AddNode(AdvancingFrontNode node) { } + public void RemoveNode(AdvancingFrontNode node) { } + + public override string ToString() + { + StringBuilder sb = new StringBuilder(); + AdvancingFrontNode node = Head; + while (node != Tail) + { + sb.Append(node.Point.X).Append("->"); + node = node.Next; + } + sb.Append(Tail.Point.X); + return sb.ToString(); + } + + /// + /// MM: This seems to be used by LocateNode to guess a position in the implicit linked list of AdvancingFrontNodes near x + /// Removed an overload that depended on this being exact + /// + private AdvancingFrontNode FindSearchNode(double x) + { + return Search; + } + + /// + /// We use a balancing tree to locate a node smaller or equal to given key value (in theory) + /// + public AdvancingFrontNode LocateNode(TriangulationPoint point) + { + return LocateNode(point.X); + } + + private AdvancingFrontNode LocateNode(double x) + { + AdvancingFrontNode node = FindSearchNode(x); + if (x < node.Value) + { + while ((node = node.Prev) != null) + { + if (x >= node.Value) + { + Search = node; + return node; + } + } + } + else + { + while ((node = node.Next) != null) + { + if (x < node.Value) + { + Search = node.Prev; + return node.Prev; + } + } + } + + return null; + } + + + /// + /// This implementation will use simple node traversal algorithm to find a point on the front + /// + public AdvancingFrontNode LocatePoint(TriangulationPoint point) + { + double px = point.X; + AdvancingFrontNode node = FindSearchNode(px); + double nx = node.Point.X; + + if (px == nx) + { + if (point != node.Point) + { + // We might have two nodes with same x value for a short time + if (point == node.Prev.Point) + { + node = node.Prev; + } + else if (point == node.Next.Point) + { + node = node.Next; + } + else + { + throw new Exception("Failed to find Node for given afront point"); + } + } + } + else if (px < nx) + { + while ((node = node.Prev) != null) + { + if (point == node.Point) + { + break; + } + } + } + else + { + while ((node = node.Next) != null) + { + if (point == node.Point) + { + break; + } + } + } + Search = node; + + return node; + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/Poly2Tri/Triangulation/Delaunay/Sweep/AdvancingFront.cs.meta b/Assets/Plugins/Poly2Tri/Triangulation/Delaunay/Sweep/AdvancingFront.cs.meta new file mode 100644 index 0000000..7b2a0e0 --- /dev/null +++ b/Assets/Plugins/Poly2Tri/Triangulation/Delaunay/Sweep/AdvancingFront.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bba5ad2e582edd14a9b9f4c2269e83e2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Poly2Tri/Triangulation/Delaunay/Sweep/AdvancingFrontNode.cs b/Assets/Plugins/Poly2Tri/Triangulation/Delaunay/Sweep/AdvancingFrontNode.cs new file mode 100644 index 0000000..4a15efd --- /dev/null +++ b/Assets/Plugins/Poly2Tri/Triangulation/Delaunay/Sweep/AdvancingFrontNode.cs @@ -0,0 +1,57 @@ +/* Poly2Tri + * Copyright (c) 2009-2010, Poly2Tri Contributors + * http://code.google.com/p/poly2tri/ + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of Poly2Tri nor the names of its contributors may be + * used to endorse or promote products derived from this software without specific + * prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/// Changes from the Java version +/// Removed getters +/// Has* turned into attributes +/// Future possibilities +/// Comments! + +namespace Poly2Tri +{ + public class AdvancingFrontNode + { + public AdvancingFrontNode Next; + public AdvancingFrontNode Prev; + public double Value; + public TriangulationPoint Point; + public DelaunayTriangle Triangle; + + public AdvancingFrontNode(TriangulationPoint point) + { + this.Point = point; + Value = point.X; + } + + public bool HasNext { get { return Next != null; } } + public bool HasPrev { get { return Prev != null; } } + } +} diff --git a/Assets/Plugins/Poly2Tri/Triangulation/Delaunay/Sweep/AdvancingFrontNode.cs.meta b/Assets/Plugins/Poly2Tri/Triangulation/Delaunay/Sweep/AdvancingFrontNode.cs.meta new file mode 100644 index 0000000..4da005d --- /dev/null +++ b/Assets/Plugins/Poly2Tri/Triangulation/Delaunay/Sweep/AdvancingFrontNode.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0f50404d2892ffc42b70043a773f577f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Poly2Tri/Triangulation/Delaunay/Sweep/DTSweep.cs b/Assets/Plugins/Poly2Tri/Triangulation/Delaunay/Sweep/DTSweep.cs new file mode 100644 index 0000000..85b9d37 --- /dev/null +++ b/Assets/Plugins/Poly2Tri/Triangulation/Delaunay/Sweep/DTSweep.cs @@ -0,0 +1,1301 @@ +/* Poly2Tri + * Copyright (c) 2009-2010, Poly2Tri Contributors + * http://code.google.com/p/poly2tri/ + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of Poly2Tri nor the names of its contributors may be + * used to endorse or promote products derived from this software without specific + * prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * Sweep-line, Constrained Delauney Triangulation (CDT) See: Domiter, V. and + * Zalik, B.(2008)'Sweep-line algorithm for constrained Delaunay triangulation', + * International Journal of Geographical Information Science + * + * "FlipScan" Constrained Edge Algorithm invented by author of this code. + * + * Author: Thomas Ã…hlén, thahlen@gmail.com + */ + +/// Changes from the Java version +/// Turned DTSweep into a static class +/// Lots of deindentation via early bailout +/// Future possibilities +/// Comments! + +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; + +namespace Poly2Tri +{ + public static class DTSweep + { + private const double PI_div2 = Math.PI / 2; + private const double PI_3div4 = 3 * Math.PI / 4; + + + /// + /// Triangulate simple polygon with holes + /// + public static void Triangulate(DTSweepContext tcx) + { + tcx.CreateAdvancingFront(); + + Sweep(tcx); + + FixupConstrainedEdges(tcx); + + // Finalize triangulation + if (tcx.TriangulationMode == TriangulationMode.Polygon) + { + FinalizationPolygon(tcx); + } + else + { + FinalizationConvexHull(tcx); + if (tcx.TriangulationMode == TriangulationMode.Constrained) + { + // work in progress. When it's done, call FinalizationConstraints INSTEAD of tcx.FinalizeTriangulation + //FinalizationConstraints(tcx); + + tcx.FinalizeTriangulation(); + } + else + { + tcx.FinalizeTriangulation(); + } + } + + tcx.Done(); + } + + + /// + /// Start sweeping the Y-sorted point set from bottom to top + /// + private static void Sweep(DTSweepContext tcx) + { + var points = tcx.Points; + TriangulationPoint point; + AdvancingFrontNode node; + + for (int i = 1; i < points.Count; i++) + { + point = points[i]; + node = PointEvent(tcx, point); + + if (node != null && point.HasEdges) + { + foreach (DTSweepConstraint e in point.Edges) + { + if (tcx.IsDebugEnabled) + { + tcx.DTDebugContext.ActiveConstraint = e; + } + EdgeEvent(tcx, e, node); + } + } + tcx.Update(null); + } + } + + + private static void FixupConstrainedEdges(DTSweepContext tcx) + { + foreach(DelaunayTriangle t in tcx.Triangles) + { + for (int i = 0; i < 3; ++i) + { + bool isConstrained = t.GetConstrainedEdgeCCW(t.Points[i]); + if (!isConstrained) + { + DTSweepConstraint edge = null; + bool hasConstrainedEdge = t.GetEdgeCCW(t.Points[i], out edge); + if (hasConstrainedEdge) + { + t.MarkConstrainedEdge((i + 2) % 3); + //t.MarkConstrainedEdgeCCW(t.Points[i]); + } + } + } + } + } + + + /// + /// If this is a Delaunay Triangulation of a pointset we need to fill so the triangle mesh gets a ConvexHull + /// + private static void FinalizationConvexHull(DTSweepContext tcx) + { + AdvancingFrontNode n1, n2; + DelaunayTriangle t1, t2; + TriangulationPoint first, p1; + + n1 = tcx.Front.Head.Next; + n2 = n1.Next; + first = n1.Point; + + TurnAdvancingFrontConvex(tcx, n1, n2); + + // Lets remove triangles connected to the two "algorithm" points + // XXX: When the first three nodes are points in a triangle we need to do a flip before + // removing triangles or we will lose a valid triangle. + // Same for last three nodes! + // !!! If I implement ConvexHull for lower right and left boundary this fix should not be + // needed and the removed triangles will be added again by default + + n1 = tcx.Front.Tail.Prev; + if (n1.Triangle.Contains(n1.Next.Point) && n1.Triangle.Contains(n1.Prev.Point)) + { + t1 = n1.Triangle.NeighborAcrossFrom(n1.Point); + RotateTrianglePair(n1.Triangle, n1.Point, t1, t1.OppositePoint(n1.Triangle, n1.Point)); + tcx.MapTriangleToNodes(n1.Triangle); + tcx.MapTriangleToNodes(t1); + } + n1 = tcx.Front.Head.Next; + if (n1.Triangle.Contains(n1.Prev.Point) && n1.Triangle.Contains(n1.Next.Point)) + { + t1 = n1.Triangle.NeighborAcrossFrom(n1.Point); + RotateTrianglePair(n1.Triangle, n1.Point, t1, t1.OppositePoint(n1.Triangle, n1.Point)); + tcx.MapTriangleToNodes(n1.Triangle); + tcx.MapTriangleToNodes(t1); + } + + // Lower right boundary + first = tcx.Front.Head.Point; + n2 = tcx.Front.Tail.Prev; + t1 = n2.Triangle; + p1 = n2.Point; + n2.Triangle = null; + do + { + tcx.RemoveFromList(t1); + p1 = t1.PointCCWFrom(p1); + if (p1 == first) + { + break; + } + t2 = t1.NeighborCCWFrom(p1); + t1.Clear(); + t1 = t2; + } while (true); + + // Lower left boundary + first = tcx.Front.Head.Next.Point; + p1 = t1.PointCWFrom(tcx.Front.Head.Point); + t2 = t1.NeighborCWFrom(tcx.Front.Head.Point); + t1.Clear(); + t1 = t2; + while (p1 != first) + { + tcx.RemoveFromList(t1); + p1 = t1.PointCCWFrom(p1); + t2 = t1.NeighborCCWFrom(p1); + t1.Clear(); + t1 = t2; + } + + // Remove current head and tail node now that we have removed all triangles attached + // to them. Then set new head and tail node points + tcx.Front.Head = tcx.Front.Head.Next; + tcx.Front.Head.Prev = null; + tcx.Front.Tail = tcx.Front.Tail.Prev; + tcx.Front.Tail.Next = null; + } + + + /// + /// We will traverse the entire advancing front and fill it to form a convex hull. + /// + private static void TurnAdvancingFrontConvex(DTSweepContext tcx, AdvancingFrontNode b, AdvancingFrontNode c) + { + AdvancingFrontNode first = b; + while (c != tcx.Front.Tail) + { + if (tcx.IsDebugEnabled) + { + tcx.DTDebugContext.ActiveNode = c; + } + + if (TriangulationUtil.Orient2d(b.Point, c.Point, c.Next.Point) == Orientation.CCW) + { + // [b,c,d] Concave - fill around c + Fill(tcx, c); + c = c.Next; + } + else + { + // [b,c,d] Convex + if (b != first && TriangulationUtil.Orient2d(b.Prev.Point, b.Point, c.Point) == Orientation.CCW) + { + // [a,b,c] Concave - fill around b + Fill(tcx, b); + b = b.Prev; + } + else + { + // [a,b,c] Convex - nothing to fill + b = c; + c = c.Next; + } + } + } + } + + + private static void FinalizationPolygon(DTSweepContext tcx) + { + // Get an Internal triangle to start with + DelaunayTriangle t = tcx.Front.Head.Next.Triangle; + TriangulationPoint p = tcx.Front.Head.Next.Point; + while (!t.GetConstrainedEdgeCW(p)) + { + DelaunayTriangle tTmp = t.NeighborCCWFrom(p); + if (tTmp == null) + { + break; + } + t = tTmp; + } + + // Collect interior triangles constrained by edges + tcx.MeshClean(t); + } + + + /// + /// NOTE: WORK IN PROGRESS - for now this will just clean out all triangles from + /// inside the outermost holes without paying attention to holes within holes.. + /// hence the work in progress :) + /// + /// Removes triangles inside "holes" (that are not inside of other holes already) + /// + /// In the example below, assume that triangle ABC is a user-defined "hole". Thus + /// any triangles inside it (that aren't inside yet another user-defined hole inside + /// triangle ABC) should get removed. In this case, since there are no user-defined + /// holes inside ABC, we would remove triangles ADE, BCE, and CDE. We would also + /// need to combine the appropriate edges so that we end up with just triangle ABC + /// + /// E + /// A +------+-----+ B A +-----------+ B + /// \ /| / \ / + /// \ / | / \ / + /// D + | / ======> \ / + /// \ | / \ / + /// \ |/ \ / + /// + + + /// C C + /// + /// + private static void FinalizationConstraints(DTSweepContext tcx) + { + // Get an Internal triangle to start with + DelaunayTriangle t = tcx.Front.Head.Triangle; + TriangulationPoint p = tcx.Front.Head.Point; + while (!t.GetConstrainedEdgeCW(p)) + { + DelaunayTriangle tTmp = t.NeighborCCWFrom(p); + if (tTmp == null) + { + break; + } + t = tTmp; + } + + // Collect interior triangles constrained by edges + tcx.MeshClean(t); + } + + + /// + /// Find closes node to the left of the new point and + /// create a new triangle. If needed new holes and basins + /// will be filled to. + /// + private static AdvancingFrontNode PointEvent(DTSweepContext tcx, TriangulationPoint point) + { + AdvancingFrontNode node, newNode; + + node = tcx.LocateNode(point); + if (tcx.IsDebugEnabled) + { + tcx.DTDebugContext.ActiveNode = node; + } + if (node == null || point == null) + { + return null; + } + newNode = NewFrontTriangle(tcx, point, node); + + // Only need to check +epsilon since point never have smaller + // x value than node due to how we fetch nodes from the front + if (point.X <= node.Point.X + MathUtil.EPSILON) + { + Fill(tcx, node); + } + + tcx.AddNode(newNode); + + FillAdvancingFront(tcx, newNode); + return newNode; + } + + + /// + /// Creates a new front triangle and legalize it + /// + private static AdvancingFrontNode NewFrontTriangle(DTSweepContext tcx, TriangulationPoint point, AdvancingFrontNode node) + { + AdvancingFrontNode newNode; + DelaunayTriangle triangle; + + triangle = new DelaunayTriangle(point, node.Point, node.Next.Point); + triangle.MarkNeighbor(node.Triangle); + tcx.Triangles.Add(triangle); + + newNode = new AdvancingFrontNode(point); + newNode.Next = node.Next; + newNode.Prev = node; + node.Next.Prev = newNode; + node.Next = newNode; + + tcx.AddNode(newNode); // XXX: BST + + if (tcx.IsDebugEnabled) + { + tcx.DTDebugContext.ActiveNode = newNode; + } + + if (!Legalize(tcx, triangle)) + { + tcx.MapTriangleToNodes(triangle); + } + + return newNode; + } + + + private static void EdgeEvent(DTSweepContext tcx, DTSweepConstraint edge, AdvancingFrontNode node) + { + try + { + tcx.EdgeEvent.ConstrainedEdge = edge; + tcx.EdgeEvent.Right = edge.P.X > edge.Q.X; + + if (tcx.IsDebugEnabled) + { + tcx.DTDebugContext.PrimaryTriangle = node.Triangle; + } + + if (IsEdgeSideOfTriangle(node.Triangle, edge.P, edge.Q)) + { + return; + } + + // For now we will do all needed filling + // TODO: integrate with flip process might give some better performance + // but for now this avoid the issue with cases that needs both flips and fills + FillEdgeEvent(tcx, edge, node); + + EdgeEvent(tcx, edge.P, edge.Q, node.Triangle, edge.Q); + } + catch (PointOnEdgeException) + { + //Debug.WriteLine( String.Format( "Warning: Skipping Edge: {0}", e.Message ) ); + throw; + } + } + + + private static void FillEdgeEvent(DTSweepContext tcx, DTSweepConstraint edge, AdvancingFrontNode node) + { + if (tcx.EdgeEvent.Right) + { + FillRightAboveEdgeEvent(tcx, edge, node); + } + else + { + FillLeftAboveEdgeEvent(tcx, edge, node); + } + } + + + private static void FillRightConcaveEdgeEvent(DTSweepContext tcx, DTSweepConstraint edge, AdvancingFrontNode node) + { + Fill(tcx, node.Next); + if (node.Next.Point != edge.P) + { + // Next above or below edge? + if (TriangulationUtil.Orient2d(edge.Q, node.Next.Point, edge.P) == Orientation.CCW) + { + // Below + if (TriangulationUtil.Orient2d(node.Point, node.Next.Point, node.Next.Next.Point) == Orientation.CCW) + { + // Next is concave + FillRightConcaveEdgeEvent(tcx, edge, node); + } + else + { + // Next is convex + } + } + } + } + + + private static void FillRightConvexEdgeEvent(DTSweepContext tcx, DTSweepConstraint edge, AdvancingFrontNode node) + { + // Next concave or convex? + if (TriangulationUtil.Orient2d(node.Next.Point, node.Next.Next.Point, node.Next.Next.Next.Point) == Orientation.CCW) + { + // Concave + FillRightConcaveEdgeEvent(tcx, edge, node.Next); + } + else + { + // Convex + // Next above or below edge? + if (TriangulationUtil.Orient2d(edge.Q, node.Next.Next.Point, edge.P) == Orientation.CCW) + { + // Below + FillRightConvexEdgeEvent(tcx, edge, node.Next); + } + else + { + // Above + } + } + } + + private static void FillRightBelowEdgeEvent(DTSweepContext tcx, DTSweepConstraint edge, AdvancingFrontNode node) + { + if (tcx.IsDebugEnabled) + { + tcx.DTDebugContext.ActiveNode = node; + } + + if (node.Point.X < edge.P.X) + { + // needed? + if (TriangulationUtil.Orient2d(node.Point, node.Next.Point, node.Next.Next.Point) == Orientation.CCW) + { + // Concave + FillRightConcaveEdgeEvent(tcx, edge, node); + } + else + { + // Convex + FillRightConvexEdgeEvent(tcx, edge, node); + // Retry this one + FillRightBelowEdgeEvent(tcx, edge, node); + } + } + } + + + private static void FillRightAboveEdgeEvent(DTSweepContext tcx, DTSweepConstraint edge, AdvancingFrontNode node) + { + while (node.Next.Point.X < edge.P.X) + { + if (tcx.IsDebugEnabled) { tcx.DTDebugContext.ActiveNode = node; } + // Check if next node is below the edge + Orientation o1 = TriangulationUtil.Orient2d(edge.Q, node.Next.Point, edge.P); + if (o1 == Orientation.CCW) + { + FillRightBelowEdgeEvent(tcx, edge, node); + } + else + { + node = node.Next; + } + } + } + + + private static void FillLeftConvexEdgeEvent(DTSweepContext tcx, DTSweepConstraint edge, AdvancingFrontNode node) + { + // Next concave or convex? + if (TriangulationUtil.Orient2d(node.Prev.Point, node.Prev.Prev.Point, node.Prev.Prev.Prev.Point) == Orientation.CW) + { + // Concave + FillLeftConcaveEdgeEvent(tcx, edge, node.Prev); + } + else + { + // Convex + // Next above or below edge? + if (TriangulationUtil.Orient2d(edge.Q, node.Prev.Prev.Point, edge.P) == Orientation.CW) + { + // Below + FillLeftConvexEdgeEvent(tcx, edge, node.Prev); + } + else + { + // Above + } + } + } + + + private static void FillLeftConcaveEdgeEvent(DTSweepContext tcx, DTSweepConstraint edge, AdvancingFrontNode node) + { + Fill(tcx, node.Prev); + if (node.Prev.Point != edge.P) + { + // Next above or below edge? + if (TriangulationUtil.Orient2d(edge.Q, node.Prev.Point, edge.P) == Orientation.CW) + { + // Below + if (TriangulationUtil.Orient2d(node.Point, node.Prev.Point, node.Prev.Prev.Point) == Orientation.CW) + { + // Next is concave + FillLeftConcaveEdgeEvent(tcx, edge, node); + } + else + { + // Next is convex + } + } + } + } + + + private static void FillLeftBelowEdgeEvent(DTSweepContext tcx, DTSweepConstraint edge, AdvancingFrontNode node) + { + if (tcx.IsDebugEnabled) + tcx.DTDebugContext.ActiveNode = node; + + if (node.Point.X > edge.P.X) + { + if (TriangulationUtil.Orient2d(node.Point, node.Prev.Point, node.Prev.Prev.Point) == Orientation.CW) + { + // Concave + FillLeftConcaveEdgeEvent(tcx, edge, node); + } + else + { + // Convex + FillLeftConvexEdgeEvent(tcx, edge, node); + // Retry this one + FillLeftBelowEdgeEvent(tcx, edge, node); + } + + } + } + + + private static void FillLeftAboveEdgeEvent(DTSweepContext tcx, DTSweepConstraint edge, AdvancingFrontNode node) + { + while (node.Prev.Point.X > edge.P.X) + { + if (tcx.IsDebugEnabled) + { + tcx.DTDebugContext.ActiveNode = node; + } + // Check if next node is below the edge + Orientation o1 = TriangulationUtil.Orient2d(edge.Q, node.Prev.Point, edge.P); + if (o1 == Orientation.CW) + { + FillLeftBelowEdgeEvent(tcx, edge, node); + } + else + { + node = node.Prev; + } + } + } + + + private static bool IsEdgeSideOfTriangle(DelaunayTriangle triangle, TriangulationPoint ep, TriangulationPoint eq) + { + int index = triangle.EdgeIndex(ep, eq); + if (index == -1) + { + return false; + } + triangle.MarkConstrainedEdge(index); + triangle = triangle.Neighbors[index]; + if (triangle != null) + { + triangle.MarkConstrainedEdge(ep, eq); + } + return true; + } + + + private static void EdgeEvent(DTSweepContext tcx, TriangulationPoint ep, TriangulationPoint eq, DelaunayTriangle triangle, TriangulationPoint point) + { + TriangulationPoint p1, p2; + + if (tcx.IsDebugEnabled) + { + tcx.DTDebugContext.PrimaryTriangle = triangle; + } + + if (IsEdgeSideOfTriangle(triangle, ep, eq)) + { + return; + } + + p1 = triangle.PointCCWFrom(point); + Orientation o1 = TriangulationUtil.Orient2d(eq, p1, ep); + if (o1 == Orientation.Collinear) + { + if (triangle.Contains(eq) && triangle.Contains(p1)) + { + triangle.MarkConstrainedEdge(eq, p1); + // We are modifying the constraint maybe it would be better to + // not change the given constraint and just keep a variable for the new constraint + tcx.EdgeEvent.ConstrainedEdge.Q = p1; + triangle = triangle.NeighborAcrossFrom(point); + EdgeEvent(tcx, ep, p1, triangle, p1); + } + else + { + throw new PointOnEdgeException("EdgeEvent - Point on constrained edge not supported yet", ep, eq, p1); + } + if (tcx.IsDebugEnabled) + { + Console.WriteLine("EdgeEvent - Point on constrained edge"); + } + + return; + } + + p2 = triangle.PointCWFrom(point); + Orientation o2 = TriangulationUtil.Orient2d(eq, p2, ep); + if (o2 == Orientation.Collinear) + { + if (triangle.Contains(eq) && triangle.Contains(p2)) + { + triangle.MarkConstrainedEdge(eq, p2); + // We are modifying the constraint maybe it would be better to + // not change the given constraint and just keep a variable for the new constraint + tcx.EdgeEvent.ConstrainedEdge.Q = p2; + triangle = triangle.NeighborAcrossFrom(point); + EdgeEvent(tcx, ep, p2, triangle, p2); + } + else + { + throw new PointOnEdgeException("EdgeEvent - Point on constrained edge not supported yet", ep, eq, p2); + } + if (tcx.IsDebugEnabled) + { + Console.WriteLine("EdgeEvent - Point on constrained edge"); + } + + return; + } + + if (o1 == o2) + { + // Need to decide if we are rotating CW or CCW to get to a triangle + // that will cross edge + if (o1 == Orientation.CW) + { + triangle = triangle.NeighborCCWFrom(point); + } + else + { + triangle = triangle.NeighborCWFrom(point); + } + EdgeEvent(tcx, ep, eq, triangle, point); + } + else + { + // This triangle crosses constraint so lets flippin start! + FlipEdgeEvent(tcx, ep, eq, triangle, point); + } + } + + + private static void FlipEdgeEvent(DTSweepContext tcx, TriangulationPoint ep, TriangulationPoint eq, DelaunayTriangle t, TriangulationPoint p) + { + DelaunayTriangle ot = t.NeighborAcrossFrom(p); + TriangulationPoint op = ot.OppositePoint(t, p); + + if (ot == null) + { + // If we want to integrate the fillEdgeEvent do it here + // With current implementation we should never get here + throw new InvalidOperationException("[BUG:FIXME] FLIP failed due to missing triangle"); + } + + if (tcx.IsDebugEnabled) + { + tcx.DTDebugContext.PrimaryTriangle = t; + tcx.DTDebugContext.SecondaryTriangle = ot; + } // TODO: remove + + bool inScanArea = TriangulationUtil.InScanArea(p, t.PointCCWFrom(p), t.PointCWFrom(p), op); + if (inScanArea) + { + // Lets rotate shared edge one vertex CW + RotateTrianglePair(t, p, ot, op); + tcx.MapTriangleToNodes(t); + tcx.MapTriangleToNodes(ot); + + if (p == eq && op == ep) + { + if (eq == tcx.EdgeEvent.ConstrainedEdge.Q && ep == tcx.EdgeEvent.ConstrainedEdge.P) + { + if (tcx.IsDebugEnabled) + { + Console.WriteLine("[FLIP] - constrained edge done"); // TODO: remove + } + t.MarkConstrainedEdge(ep, eq); + ot.MarkConstrainedEdge(ep, eq); + Legalize(tcx, t); + Legalize(tcx, ot); + } + else + { + if (tcx.IsDebugEnabled) + { + Console.WriteLine("[FLIP] - subedge done"); // TODO: remove + } + // XXX: I think one of the triangles should be legalized here? + } + } + else + { + if (tcx.IsDebugEnabled) + { + Console.WriteLine("[FLIP] - flipping and continuing with triangle still crossing edge"); // TODO: remove + } + Orientation o = TriangulationUtil.Orient2d(eq, op, ep); + t = NextFlipTriangle(tcx, o, t, ot, p, op); + FlipEdgeEvent(tcx, ep, eq, t, p); + } + } + else + { + TriangulationPoint newP = null; + if (NextFlipPoint(ep, eq, ot, op, out newP)) + { + FlipScanEdgeEvent(tcx, ep, eq, t, ot, newP); + EdgeEvent(tcx, ep, eq, t, p); + } + } + } + + + /// + /// When we need to traverse from one triangle to the next we need + /// the point in current triangle that is the opposite point to the next + /// triangle. + /// + private static bool NextFlipPoint(TriangulationPoint ep, TriangulationPoint eq, DelaunayTriangle ot, TriangulationPoint op, out TriangulationPoint newP) + { + newP = null; + Orientation o2d = TriangulationUtil.Orient2d(eq, op, ep); + switch (o2d) + { + case Orientation.CW: + newP = ot.PointCCWFrom(op); + return true; + case Orientation.CCW: + newP = ot.PointCWFrom(op); + return true; + case Orientation.Collinear: + // TODO: implement support for point on constraint edge + //throw new PointOnEdgeException("Point on constrained edge not supported yet", eq, op, ep); + return false; + default: + throw new NotImplementedException("Orientation not handled"); + } + } + + + /// + /// After a flip we have two triangles and know that only one will still be + /// intersecting the edge. So decide which to contiune with and legalize the other + /// + /// + /// should be the result of an TriangulationUtil.orient2d( eq, op, ep ) + /// triangle 1 + /// triangle 2 + /// a point shared by both triangles + /// another point shared by both triangles + /// returns the triangle still intersecting the edge + private static DelaunayTriangle NextFlipTriangle(DTSweepContext tcx, Orientation o, DelaunayTriangle t, DelaunayTriangle ot, TriangulationPoint p, TriangulationPoint op) + { + int edgeIndex; + if (o == Orientation.CCW) + { + // ot is not crossing edge after flip + edgeIndex = ot.EdgeIndex(p, op); + ot.EdgeIsDelaunay[edgeIndex] = true; + Legalize(tcx, ot); + ot.EdgeIsDelaunay.Clear(); + return t; + } + // t is not crossing edge after flip + edgeIndex = t.EdgeIndex(p, op); + t.EdgeIsDelaunay[edgeIndex] = true; + Legalize(tcx, t); + t.EdgeIsDelaunay.Clear(); + return ot; + } + + + /// + /// Scan part of the FlipScan algorithm
+ /// When a triangle pair isn't flippable we will scan for the next + /// point that is inside the flip triangle scan area. When found + /// we generate a new flipEdgeEvent + ///
+ /// + /// last point on the edge we are traversing + /// first point on the edge we are traversing + /// the current triangle sharing the point eq with edge + /// + /// + private static void FlipScanEdgeEvent(DTSweepContext tcx, TriangulationPoint ep, TriangulationPoint eq, DelaunayTriangle flipTriangle, DelaunayTriangle t, TriangulationPoint p) + { + DelaunayTriangle ot; + TriangulationPoint op, newP; + bool inScanArea; + + ot = t.NeighborAcrossFrom(p); + op = ot.OppositePoint(t, p); + + if (ot == null) + { + // If we want to integrate the fillEdgeEvent do it here + // With current implementation we should never get here + throw new Exception("[BUG:FIXME] FLIP failed due to missing triangle"); + } + + if (tcx.IsDebugEnabled) + { + Console.WriteLine("[FLIP:SCAN] - scan next point"); // TODO: remove + tcx.DTDebugContext.PrimaryTriangle = t; + tcx.DTDebugContext.SecondaryTriangle = ot; + } + + inScanArea = TriangulationUtil.InScanArea(eq, flipTriangle.PointCCWFrom(eq), flipTriangle.PointCWFrom(eq), op); + if (inScanArea) + { + // flip with new edge op->eq + FlipEdgeEvent(tcx, eq, op, ot, op); + // TODO: Actually I just figured out that it should be possible to + // improve this by getting the next ot and op before the the above + // flip and continue the flipScanEdgeEvent here + // set new ot and op here and loop back to inScanArea test + // also need to set a new flipTriangle first + // Turns out at first glance that this is somewhat complicated + // so it will have to wait. + } + else + { + if (NextFlipPoint(ep, eq, ot, op, out newP)) + { + FlipScanEdgeEvent(tcx, ep, eq, flipTriangle, ot, newP); + } + //newP = NextFlipPoint(ep, eq, ot, op); + } + } + + + /// + /// Fills holes in the Advancing Front + /// + private static void FillAdvancingFront(DTSweepContext tcx, AdvancingFrontNode n) + { + AdvancingFrontNode node; + double angle; + + // Fill right holes + node = n.Next; + while (node.HasNext) + { + angle = HoleAngle(node); + if (angle > PI_div2 || angle < -PI_div2) + { + break; + } + Fill(tcx, node); + node = node.Next; + } + + // Fill left holes + node = n.Prev; + while (node.HasPrev) + { + angle = HoleAngle(node); + if (angle > PI_div2 || angle < -PI_div2) + { + break; + } + Fill(tcx, node); + node = node.Prev; + } + + // Fill right basins + if (n.HasNext && n.Next.HasNext) + { + angle = BasinAngle(n); + if (angle < PI_3div4) + { + FillBasin(tcx, n); + } + } + } + + + /// + /// Fills a basin that has formed on the Advancing Front to the right + /// of given node.
+ /// First we decide a left,bottom and right node that forms the + /// boundaries of the basin. Then we do a reqursive fill. + ///
+ /// + /// starting node, this or next node will be left node + private static void FillBasin(DTSweepContext tcx, AdvancingFrontNode node) + { + if (TriangulationUtil.Orient2d(node.Point, node.Next.Point, node.Next.Next.Point) == Orientation.CCW) + { + // tcx.basin.leftNode = node.next.next; + tcx.Basin.leftNode = node; + } + else + { + tcx.Basin.leftNode = node.Next; + } + + // Find the bottom and right node + tcx.Basin.bottomNode = tcx.Basin.leftNode; + while (tcx.Basin.bottomNode.HasNext && tcx.Basin.bottomNode.Point.Y >= tcx.Basin.bottomNode.Next.Point.Y) + { + tcx.Basin.bottomNode = tcx.Basin.bottomNode.Next; + } + + if (tcx.Basin.bottomNode == tcx.Basin.leftNode) + { + return; // No valid basin + } + + tcx.Basin.rightNode = tcx.Basin.bottomNode; + while (tcx.Basin.rightNode.HasNext && tcx.Basin.rightNode.Point.Y < tcx.Basin.rightNode.Next.Point.Y) + { + tcx.Basin.rightNode = tcx.Basin.rightNode.Next; + } + + if (tcx.Basin.rightNode == tcx.Basin.bottomNode) + { + return; // No valid basins + } + + tcx.Basin.width = tcx.Basin.rightNode.Point.X - tcx.Basin.leftNode.Point.X; + tcx.Basin.leftHighest = tcx.Basin.leftNode.Point.Y > tcx.Basin.rightNode.Point.Y; + + FillBasinReq(tcx, tcx.Basin.bottomNode); + } + + + /// + /// Recursive algorithm to fill a Basin with triangles + /// + private static void FillBasinReq(DTSweepContext tcx, AdvancingFrontNode node) + { + if (IsShallow(tcx, node)) + { + return; // if shallow stop filling + } + + Fill(tcx, node); + if (node.Prev == tcx.Basin.leftNode && node.Next == tcx.Basin.rightNode) + { + return; + } + else if (node.Prev == tcx.Basin.leftNode) + { + Orientation o = TriangulationUtil.Orient2d(node.Point, node.Next.Point, node.Next.Next.Point); + if (o == Orientation.CW) + { + return; + } + node = node.Next; + } + else if (node.Next == tcx.Basin.rightNode) + { + Orientation o = TriangulationUtil.Orient2d(node.Point, node.Prev.Point, node.Prev.Prev.Point); + if (o == Orientation.CCW) + { + return; + } + node = node.Prev; + } + else + { + // Continue with the neighbor node with lowest Y value + if (node.Prev.Point.Y < node.Next.Point.Y) + { + node = node.Prev; + } + else + { + node = node.Next; + } + } + FillBasinReq(tcx, node); + } + + + private static bool IsShallow(DTSweepContext tcx, AdvancingFrontNode node) + { + double height; + + if (tcx.Basin.leftHighest) + { + height = tcx.Basin.leftNode.Point.Y - node.Point.Y; + } + else + { + height = tcx.Basin.rightNode.Point.Y - node.Point.Y; + } + if (tcx.Basin.width > height) + { + return true; + } + return false; + } + + + /// + /// ??? + /// + /// middle node + /// the angle between 3 front nodes + private static double HoleAngle(AdvancingFrontNode node) + { + // XXX: do we really need a signed angle for holeAngle? + // could possible save some cycles here + /* Complex plane + * ab = cosA +i*sinA + * ab = (ax + ay*i)(bx + by*i) = (ax*bx + ay*by) + i(ax*by-ay*bx) + * atan2(y,x) computes the principal value of the argument function + * applied to the complex number x+iy + * Where x = ax*bx + ay*by + * y = ax*by - ay*bx + */ + double px = node.Point.X; + double py = node.Point.Y; + double ax = node.Next.Point.X - px; + double ay = node.Next.Point.Y - py; + double bx = node.Prev.Point.X - px; + double by = node.Prev.Point.Y - py; + return Math.Atan2((ax * by) - (ay * bx), (ax * bx) + (ay * by)); + } + + + /// + /// The basin angle is decided against the horizontal line [1,0] + /// + private static double BasinAngle(AdvancingFrontNode node) + { + double ax = node.Point.X - node.Next.Next.Point.X; + double ay = node.Point.Y - node.Next.Next.Point.Y; + return Math.Atan2(ay, ax); + } + + + /// + /// Adds a triangle to the advancing front to fill a hole. + /// + /// + /// middle node, that is the bottom of the hole + private static void Fill(DTSweepContext tcx, AdvancingFrontNode node) + { + DelaunayTriangle triangle = new DelaunayTriangle(node.Prev.Point, node.Point, node.Next.Point); + // TODO: should copy the cEdge value from neighbor triangles + // for now cEdge values are copied during the legalize + triangle.MarkNeighbor(node.Prev.Triangle); + triangle.MarkNeighbor(node.Triangle); + tcx.Triangles.Add(triangle); + + // Update the advancing front + node.Prev.Next = node.Next; + node.Next.Prev = node.Prev; + tcx.RemoveNode(node); + + // If it was legalized the triangle has already been mapped + if (!Legalize(tcx, triangle)) + { + tcx.MapTriangleToNodes(triangle); + } + } + + + /// + /// Returns true if triangle was legalized + /// + private static bool Legalize(DTSweepContext tcx, DelaunayTriangle t) + { + // To legalize a triangle we start by finding if any of the three edges + // violate the Delaunay condition + for (int i = 0; i < 3; i++) + { + // TODO: fix so that cEdge is always valid when creating new triangles then we can check it here + // instead of below with ot + if (t.EdgeIsDelaunay[i]) + { + continue; + } + + DelaunayTriangle ot = t.Neighbors[i]; + if (ot == null) + { + continue; + } + + TriangulationPoint p = t.Points[i]; + TriangulationPoint op = ot.OppositePoint(t, p); + int oi = ot.IndexOf(op); + // If this is a Constrained Edge or a Delaunay Edge(only during recursive legalization) + // then we should not try to legalize + if (ot.EdgeIsConstrained[oi] || ot.EdgeIsDelaunay[oi]) + { + t.SetConstrainedEdgeAcross(p, ot.EdgeIsConstrained[oi]); // XXX: have no good way of setting this property when creating new triangles so lets set it here + continue; + } + + if (!TriangulationUtil.SmartIncircle(p, t.PointCCWFrom(p), t.PointCWFrom(p), op)) + { + continue; + } + + // Lets mark this shared edge as Delaunay + t.EdgeIsDelaunay[i] = true; + ot.EdgeIsDelaunay[oi] = true; + + // Lets rotate shared edge one vertex CW to legalize it + RotateTrianglePair(t, p, ot, op); + + // We now got one valid Delaunay Edge shared by two triangles + // This gives us 4 new edges to check for Delaunay + + // Make sure that triangle to node mapping is done only one time for a specific triangle + if (!Legalize(tcx, t)) + { + tcx.MapTriangleToNodes(t); + } + if (!Legalize(tcx, ot)) + { + tcx.MapTriangleToNodes(ot); + } + + // Reset the Delaunay edges, since they only are valid Delaunay edges + // until we add a new triangle or point. + // XXX: need to think about this. Can these edges be tried after we + // return to previous recursive level? + t.EdgeIsDelaunay[i] = false; + ot.EdgeIsDelaunay[oi] = false; + + // If triangle have been legalized no need to check the other edges since + // the recursive legalization will handles those so we can end here. + return true; + } + return false; + } + + + /// + /// Rotates a triangle pair one vertex CW + /// n2 n2 + /// P +-----+ P +-----+ + /// | t /| |\ t | + /// | / | | \ | + /// n1| / |n3 n1| \ |n3 + /// | / | after CW | \ | + /// |/ oT | | oT \| + /// +-----+ oP +-----+ + /// n4 n4 + /// + private static void RotateTrianglePair(DelaunayTriangle t, TriangulationPoint p, DelaunayTriangle ot, TriangulationPoint op) + { + DelaunayTriangle n1, n2, n3, n4; + n1 = t.NeighborCCWFrom(p); + n2 = t.NeighborCWFrom(p); + n3 = ot.NeighborCCWFrom(op); + n4 = ot.NeighborCWFrom(op); + + bool ce1, ce2, ce3, ce4; + ce1 = t.GetConstrainedEdgeCCW(p); + ce2 = t.GetConstrainedEdgeCW(p); + ce3 = ot.GetConstrainedEdgeCCW(op); + ce4 = ot.GetConstrainedEdgeCW(op); + + bool de1, de2, de3, de4; + de1 = t.GetDelaunayEdgeCCW(p); + de2 = t.GetDelaunayEdgeCW(p); + de3 = ot.GetDelaunayEdgeCCW(op); + de4 = ot.GetDelaunayEdgeCW(op); + + t.Legalize(p, op); + ot.Legalize(op, p); + + // Remap dEdge + ot.SetDelaunayEdgeCCW(p, de1); + t.SetDelaunayEdgeCW(p, de2); + t.SetDelaunayEdgeCCW(op, de3); + ot.SetDelaunayEdgeCW(op, de4); + + // Remap cEdge + ot.SetConstrainedEdgeCCW(p, ce1); + t.SetConstrainedEdgeCW(p, ce2); + t.SetConstrainedEdgeCCW(op, ce3); + ot.SetConstrainedEdgeCW(op, ce4); + + // Remap neighbors + // XXX: might optimize the markNeighbor by keeping track of + // what side should be assigned to what neighbor after the + // rotation. Now mark neighbor does lots of testing to find + // the right side. + t.Neighbors.Clear(); + ot.Neighbors.Clear(); + if (n1 != null) + { + ot.MarkNeighbor(n1); + } + if (n2 != null) + { + t.MarkNeighbor(n2); + } + if (n3 != null) + { + t.MarkNeighbor(n3); + } + if (n4 != null) + { + ot.MarkNeighbor(n4); + } + t.MarkNeighbor(ot); + } + } +} diff --git a/Assets/Plugins/Poly2Tri/Triangulation/Delaunay/Sweep/DTSweep.cs.meta b/Assets/Plugins/Poly2Tri/Triangulation/Delaunay/Sweep/DTSweep.cs.meta new file mode 100644 index 0000000..bc13109 --- /dev/null +++ b/Assets/Plugins/Poly2Tri/Triangulation/Delaunay/Sweep/DTSweep.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 18835840dca416041bff74eaaf5dcc47 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Poly2Tri/Triangulation/Delaunay/Sweep/DTSweepBasin.cs b/Assets/Plugins/Poly2Tri/Triangulation/Delaunay/Sweep/DTSweepBasin.cs new file mode 100644 index 0000000..db1ffef --- /dev/null +++ b/Assets/Plugins/Poly2Tri/Triangulation/Delaunay/Sweep/DTSweepBasin.cs @@ -0,0 +1,42 @@ +/* Poly2Tri + * Copyright (c) 2009-2010, Poly2Tri Contributors + * http://code.google.com/p/poly2tri/ + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of Poly2Tri nor the names of its contributors may be + * used to endorse or promote products derived from this software without specific + * prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +namespace Poly2Tri +{ + public class DTSweepBasin + { + public AdvancingFrontNode leftNode; + public AdvancingFrontNode bottomNode; + public AdvancingFrontNode rightNode; + public double width; + public bool leftHighest; + } +} diff --git a/Assets/Plugins/Poly2Tri/Triangulation/Delaunay/Sweep/DTSweepBasin.cs.meta b/Assets/Plugins/Poly2Tri/Triangulation/Delaunay/Sweep/DTSweepBasin.cs.meta new file mode 100644 index 0000000..fd8a164 --- /dev/null +++ b/Assets/Plugins/Poly2Tri/Triangulation/Delaunay/Sweep/DTSweepBasin.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 295b5899a6bed9d4187f6a49c293fc2f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Poly2Tri/Triangulation/Delaunay/Sweep/DTSweepConstraint.cs b/Assets/Plugins/Poly2Tri/Triangulation/Delaunay/Sweep/DTSweepConstraint.cs new file mode 100644 index 0000000..35fd156 --- /dev/null +++ b/Assets/Plugins/Poly2Tri/Triangulation/Delaunay/Sweep/DTSweepConstraint.cs @@ -0,0 +1,52 @@ +/* Poly2Tri + * Copyright (c) 2009-2010, Poly2Tri Contributors + * http://code.google.com/p/poly2tri/ + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of Poly2Tri nor the names of its contributors may be + * used to endorse or promote products derived from this software without specific + * prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +using System; +//using System.Collections.Generic; +using System.Diagnostics; +//using System.Linq; + + +namespace Poly2Tri +{ + public class DTSweepConstraint : TriangulationConstraint + { + /// + /// Give two points in any order. Will always be ordered so + /// that q.y > p.y and q.x > p.x if same y value + /// + public DTSweepConstraint(TriangulationPoint p1, TriangulationPoint p2) + : base(p1, p2) + { + Q.AddEdge(this); + } + } +} diff --git a/Assets/Plugins/Poly2Tri/Triangulation/Delaunay/Sweep/DTSweepConstraint.cs.meta b/Assets/Plugins/Poly2Tri/Triangulation/Delaunay/Sweep/DTSweepConstraint.cs.meta new file mode 100644 index 0000000..f732ad6 --- /dev/null +++ b/Assets/Plugins/Poly2Tri/Triangulation/Delaunay/Sweep/DTSweepConstraint.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 24c139533abc53242a5fda851aed1f90 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Poly2Tri/Triangulation/Delaunay/Sweep/DTSweepContext.cs b/Assets/Plugins/Poly2Tri/Triangulation/Delaunay/Sweep/DTSweepContext.cs new file mode 100644 index 0000000..b69dc52 --- /dev/null +++ b/Assets/Plugins/Poly2Tri/Triangulation/Delaunay/Sweep/DTSweepContext.cs @@ -0,0 +1,252 @@ +/* Poly2Tri + * Copyright (c) 2009-2010, Poly2Tri Contributors + * http://code.google.com/p/poly2tri/ + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of Poly2Tri nor the names of its contributors may be + * used to endorse or promote products derived from this software without specific + * prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +namespace Poly2Tri +{ + /** + * + * @author Thomas Åhlén, thahlen@gmail.com + * + */ + public class DTSweepContext : TriangulationContext + { + // Inital triangle factor, seed triangle will extend 30% of + // PointSet width to both left and right. + private readonly float ALPHA = 0.3f; + + public AdvancingFront Front; + public TriangulationPoint Head { get; set; } + public TriangulationPoint Tail { get; set; } + + public DTSweepBasin Basin = new DTSweepBasin(); + public DTSweepEdgeEvent EdgeEvent = new DTSweepEdgeEvent(); + + private DTSweepPointComparator _comparator = new DTSweepPointComparator(); + + public override TriangulationAlgorithm Algorithm { get { return TriangulationAlgorithm.DTSweep; } } + + + public DTSweepContext() + { + Clear(); + } + + + public override bool IsDebugEnabled + { + get + { + return base.IsDebugEnabled; + } + protected set + { + if (value && DebugContext == null) + { + DebugContext = new DTSweepDebugContext(this); + } + base.IsDebugEnabled = value; + } + } + + + public void RemoveFromList(DelaunayTriangle triangle) + { + Triangles.Remove(triangle); + // TODO: remove all neighbor pointers to this triangle + // for( int i=0; i<3; i++ ) + // { + // if( triangle.neighbors[i] != null ) + // { + // triangle.neighbors[i].clearNeighbor( triangle ); + // } + // } + // triangle.clearNeighbors(); + } + + + public void MeshClean(DelaunayTriangle triangle) + { + MeshCleanReq(triangle); + } + + + private void MeshCleanReq(DelaunayTriangle triangle) + { + if (triangle != null && !triangle.IsInterior) + { + triangle.IsInterior = true; + Triangulatable.AddTriangle(triangle); + + for (int i = 0; i < 3; i++) + { + if (!triangle.EdgeIsConstrained[i]) + { + MeshCleanReq(triangle.Neighbors[i]); + } + } + } + } + + + public override void Clear() + { + base.Clear(); + Triangles.Clear(); + } + + + public void AddNode(AdvancingFrontNode node) + { + // Console.WriteLine( "add:" + node.key + ":" + System.identityHashCode(node.key)); + // m_nodeTree.put( node.getKey(), node ); + Front.AddNode(node); + } + + + public void RemoveNode(AdvancingFrontNode node) + { + // Console.WriteLine( "remove:" + node.key + ":" + System.identityHashCode(node.key)); + // m_nodeTree.delete( node.getKey() ); + Front.RemoveNode(node); + } + + + public AdvancingFrontNode LocateNode(TriangulationPoint point) + { + return Front.LocateNode(point); + } + + + public void CreateAdvancingFront() + { + AdvancingFrontNode head, tail, middle; + // Initial triangle + DelaunayTriangle iTriangle = new DelaunayTriangle(Points[0], Tail, Head); + Triangles.Add(iTriangle); + + head = new AdvancingFrontNode(iTriangle.Points[1]); + head.Triangle = iTriangle; + middle = new AdvancingFrontNode(iTriangle.Points[0]); + middle.Triangle = iTriangle; + tail = new AdvancingFrontNode(iTriangle.Points[2]); + + Front = new AdvancingFront(head, tail); + Front.AddNode(middle); + + // TODO: I think it would be more intuitive if head is middles next and not previous + // so swap head and tail + Front.Head.Next = middle; + middle.Next = Front.Tail; + middle.Prev = Front.Head; + Front.Tail.Prev = middle; + } + + + /// + /// Try to map a node to all sides of this triangle that don't have + /// a neighbor. + /// + public void MapTriangleToNodes(DelaunayTriangle t) + { + for (int i = 0; i < 3; i++) + { + if (t.Neighbors[i] == null) + { + AdvancingFrontNode n = Front.LocatePoint(t.PointCWFrom(t.Points[i])); + if (n != null) + { + n.Triangle = t; + } + } + } + } + + + public override void PrepareTriangulation(ITriangulatable t) + { + base.PrepareTriangulation(t); + + double xmax, xmin; + double ymax, ymin; + + xmax = xmin = Points[0].X; + ymax = ymin = Points[0].Y; + + // Calculate bounds. Should be combined with the sorting + foreach (TriangulationPoint p in Points) + { + if (p.X > xmax) + { + xmax = p.X; + } + if (p.X < xmin) + { + xmin = p.X; + } + if (p.Y > ymax) + { + ymax = p.Y; + } + if (p.Y < ymin) + { + ymin = p.Y; + } + } + + double deltaX = ALPHA * (xmax - xmin); + double deltaY = ALPHA * (ymax - ymin); + TriangulationPoint p1 = new TriangulationPoint(xmax + deltaX, ymin - deltaY); + TriangulationPoint p2 = new TriangulationPoint(xmin - deltaX, ymin - deltaY); + + Head = p1; + Tail = p2; + + // long time = System.nanoTime(); + // Sort the points along y-axis + Points.Sort(_comparator); + // logger.info( "Triangulation setup [{}ms]", ( System.nanoTime() - time ) / 1e6 ); + } + + + public void FinalizeTriangulation() + { + Triangulatable.AddTriangles(Triangles); + Triangles.Clear(); + } + + + public override TriangulationConstraint NewConstraint(TriangulationPoint a, TriangulationPoint b) + { + return new DTSweepConstraint(a, b); + } + + } +} diff --git a/Assets/Plugins/Poly2Tri/Triangulation/Delaunay/Sweep/DTSweepContext.cs.meta b/Assets/Plugins/Poly2Tri/Triangulation/Delaunay/Sweep/DTSweepContext.cs.meta new file mode 100644 index 0000000..8ca648e --- /dev/null +++ b/Assets/Plugins/Poly2Tri/Triangulation/Delaunay/Sweep/DTSweepContext.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5ee2e0932fff59f429c452bba590cf83 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Poly2Tri/Triangulation/Delaunay/Sweep/DTSweepDebugContext.cs b/Assets/Plugins/Poly2Tri/Triangulation/Delaunay/Sweep/DTSweepDebugContext.cs new file mode 100644 index 0000000..c50a487 --- /dev/null +++ b/Assets/Plugins/Poly2Tri/Triangulation/Delaunay/Sweep/DTSweepDebugContext.cs @@ -0,0 +1,65 @@ +/* Poly2Tri + * Copyright (c) 2009-2010, Poly2Tri Contributors + * http://code.google.com/p/poly2tri/ + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of Poly2Tri nor the names of its contributors may be + * used to endorse or promote products derived from this software without specific + * prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +namespace Poly2Tri +{ + public class DTSweepDebugContext : TriangulationDebugContext + { + /* + * Fields used for visual representation of current triangulation + */ + + public DelaunayTriangle PrimaryTriangle { get { return _primaryTriangle; } set { _primaryTriangle = value; _tcx.Update("set PrimaryTriangle"); } } + public DelaunayTriangle SecondaryTriangle { get { return _secondaryTriangle; } set { _secondaryTriangle = value; _tcx.Update("set SecondaryTriangle"); } } + public TriangulationPoint ActivePoint { get { return _activePoint; } set { _activePoint = value; _tcx.Update("set ActivePoint"); } } + public AdvancingFrontNode ActiveNode { get { return _activeNode; } set { _activeNode = value; _tcx.Update("set ActiveNode"); } } + public DTSweepConstraint ActiveConstraint { get { return _activeConstraint; } set { _activeConstraint = value; _tcx.Update("set ActiveConstraint"); } } + + public DTSweepDebugContext(DTSweepContext tcx) : base(tcx) { } + + public bool IsDebugContext { get { return true; } } + + public override void Clear() + { + PrimaryTriangle = null; + SecondaryTriangle = null; + ActivePoint = null; + ActiveNode = null; + ActiveConstraint = null; + } + + private DelaunayTriangle _primaryTriangle; + private DelaunayTriangle _secondaryTriangle; + private TriangulationPoint _activePoint; + private AdvancingFrontNode _activeNode; + private DTSweepConstraint _activeConstraint; + } +} diff --git a/Assets/Plugins/Poly2Tri/Triangulation/Delaunay/Sweep/DTSweepDebugContext.cs.meta b/Assets/Plugins/Poly2Tri/Triangulation/Delaunay/Sweep/DTSweepDebugContext.cs.meta new file mode 100644 index 0000000..bd99ddb --- /dev/null +++ b/Assets/Plugins/Poly2Tri/Triangulation/Delaunay/Sweep/DTSweepDebugContext.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c80776e6f580608498870e9ba0c7fdca +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Poly2Tri/Triangulation/Delaunay/Sweep/DTSweepEdgeEvent.cs b/Assets/Plugins/Poly2Tri/Triangulation/Delaunay/Sweep/DTSweepEdgeEvent.cs new file mode 100644 index 0000000..4722d60 --- /dev/null +++ b/Assets/Plugins/Poly2Tri/Triangulation/Delaunay/Sweep/DTSweepEdgeEvent.cs @@ -0,0 +1,42 @@ +/* Poly2Tri + * Copyright (c) 2009-2010, Poly2Tri Contributors + * http://code.google.com/p/poly2tri/ + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of Poly2Tri nor the names of its contributors may be + * used to endorse or promote products derived from this software without specific + * prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/// Changes from the Java version +/// Turned DTSweepEdgeEvent into a value type + +namespace Poly2Tri +{ + public class DTSweepEdgeEvent + { + public DTSweepConstraint ConstrainedEdge; + public bool Right; + } +} diff --git a/Assets/Plugins/Poly2Tri/Triangulation/Delaunay/Sweep/DTSweepEdgeEvent.cs.meta b/Assets/Plugins/Poly2Tri/Triangulation/Delaunay/Sweep/DTSweepEdgeEvent.cs.meta new file mode 100644 index 0000000..70e10f1 --- /dev/null +++ b/Assets/Plugins/Poly2Tri/Triangulation/Delaunay/Sweep/DTSweepEdgeEvent.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3c7810b370713bb4985dfa014259efbc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Poly2Tri/Triangulation/Delaunay/Sweep/DTSweepPointComparator.cs b/Assets/Plugins/Poly2Tri/Triangulation/Delaunay/Sweep/DTSweepPointComparator.cs new file mode 100644 index 0000000..ce4776c --- /dev/null +++ b/Assets/Plugins/Poly2Tri/Triangulation/Delaunay/Sweep/DTSweepPointComparator.cs @@ -0,0 +1,65 @@ +/* Poly2Tri + * Copyright (c) 2009-2010, Poly2Tri Contributors + * http://code.google.com/p/poly2tri/ + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of Poly2Tri nor the names of its contributors may be + * used to endorse or promote products derived from this software without specific + * prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +using System.Collections.Generic; + +namespace Poly2Tri +{ + public class DTSweepPointComparator : IComparer + { + public int Compare(TriangulationPoint p1, TriangulationPoint p2) + { + if (p1.Y < p2.Y) + { + return -1; + } + else if (p1.Y > p2.Y) + { + return 1; + } + else + { + if (p1.X < p2.X) + { + return -1; + } + else if (p1.X > p2.X) + { + return 1; + } + else + { + return 0; + } + } + } + } +} diff --git a/Assets/Plugins/Poly2Tri/Triangulation/Delaunay/Sweep/DTSweepPointComparator.cs.meta b/Assets/Plugins/Poly2Tri/Triangulation/Delaunay/Sweep/DTSweepPointComparator.cs.meta new file mode 100644 index 0000000..717031c --- /dev/null +++ b/Assets/Plugins/Poly2Tri/Triangulation/Delaunay/Sweep/DTSweepPointComparator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: dfb17679c246e5f4fa5a535f717d47d5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Poly2Tri/Triangulation/Delaunay/Sweep/PointOnEdgeException.cs b/Assets/Plugins/Poly2Tri/Triangulation/Delaunay/Sweep/PointOnEdgeException.cs new file mode 100644 index 0000000..5794fda --- /dev/null +++ b/Assets/Plugins/Poly2Tri/Triangulation/Delaunay/Sweep/PointOnEdgeException.cs @@ -0,0 +1,48 @@ +/* Poly2Tri + * Copyright (c) 2009-2010, Poly2Tri Contributors + * http://code.google.com/p/poly2tri/ + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of Poly2Tri nor the names of its contributors may be + * used to endorse or promote products derived from this software without specific + * prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +using System; + +namespace Poly2Tri +{ + public class PointOnEdgeException : NotImplementedException + { + public readonly TriangulationPoint A, B, C; + + public PointOnEdgeException(string message, TriangulationPoint a, TriangulationPoint b, TriangulationPoint c) + : base(message) + { + A = a; + B = b; + C = c; + } + } +} diff --git a/Assets/Plugins/Poly2Tri/Triangulation/Delaunay/Sweep/PointOnEdgeException.cs.meta b/Assets/Plugins/Poly2Tri/Triangulation/Delaunay/Sweep/PointOnEdgeException.cs.meta new file mode 100644 index 0000000..528c924 --- /dev/null +++ b/Assets/Plugins/Poly2Tri/Triangulation/Delaunay/Sweep/PointOnEdgeException.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a6f5e106faca1c442a1def9a56695eac +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Poly2Tri/Triangulation/ITriangulatable.cs b/Assets/Plugins/Poly2Tri/Triangulation/ITriangulatable.cs new file mode 100644 index 0000000..10c3066 --- /dev/null +++ b/Assets/Plugins/Poly2Tri/Triangulation/ITriangulatable.cs @@ -0,0 +1,57 @@ +/* Poly2Tri + * Copyright (c) 2009-2010, Poly2Tri Contributors + * http://code.google.com/p/poly2tri/ + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of Poly2Tri nor the names of its contributors may be + * used to endorse or promote products derived from this software without specific + * prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +using System.Collections.Generic; + +namespace Poly2Tri +{ + public interface ITriangulatable + { + //IList Points { get; } // MM: Neither of these are used via interface (yet?) + IList Triangles { get; } + TriangulationMode TriangulationMode { get; } + string FileName { get; set; } + bool DisplayFlipX { get; set; } + bool DisplayFlipY { get; set; } + float DisplayRotate { get; set; } + double Precision { get; set; } + double MinX { get; } + double MaxX { get; } + double MinY { get; } + double MaxY { get; } + Rect2D Bounds { get; } + + void Prepare(TriangulationContext tcx); + void AddTriangle(DelaunayTriangle t); + void AddTriangles(IEnumerable list); + void ClearTriangles(); + } +} diff --git a/Assets/Plugins/Poly2Tri/Triangulation/ITriangulatable.cs.meta b/Assets/Plugins/Poly2Tri/Triangulation/ITriangulatable.cs.meta new file mode 100644 index 0000000..37a1e11 --- /dev/null +++ b/Assets/Plugins/Poly2Tri/Triangulation/ITriangulatable.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 75ea7f139cb97ce4c8150e06934491d7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Poly2Tri/Triangulation/Orientation.cs b/Assets/Plugins/Poly2Tri/Triangulation/Orientation.cs new file mode 100644 index 0000000..d7bee7a --- /dev/null +++ b/Assets/Plugins/Poly2Tri/Triangulation/Orientation.cs @@ -0,0 +1,40 @@ +/* Poly2Tri + * Copyright (c) 2009-2010, Poly2Tri Contributors + * http://code.google.com/p/poly2tri/ + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of Poly2Tri nor the names of its contributors may be + * used to endorse or promote products derived from this software without specific + * prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +namespace Poly2Tri +{ + public enum Orientation + { + CW, + CCW, + Collinear + } +} diff --git a/Assets/Plugins/Poly2Tri/Triangulation/Orientation.cs.meta b/Assets/Plugins/Poly2Tri/Triangulation/Orientation.cs.meta new file mode 100644 index 0000000..6fe7843 --- /dev/null +++ b/Assets/Plugins/Poly2Tri/Triangulation/Orientation.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f53cc2457ddb3dd4c82e5b3eb98327c8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Poly2Tri/Triangulation/Polygon.meta b/Assets/Plugins/Poly2Tri/Triangulation/Polygon.meta new file mode 100644 index 0000000..ceb81c8 --- /dev/null +++ b/Assets/Plugins/Poly2Tri/Triangulation/Polygon.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 30e3877e8ca306440ac44dfc20462e1d +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Poly2Tri/Triangulation/Polygon/Contour.cs b/Assets/Plugins/Poly2Tri/Triangulation/Polygon/Contour.cs new file mode 100644 index 0000000..effcf19 --- /dev/null +++ b/Assets/Plugins/Poly2Tri/Triangulation/Polygon/Contour.cs @@ -0,0 +1,577 @@ +/* Poly2Tri + * Copyright (c) 2009-2010, Poly2Tri Contributors + * http://code.google.com/p/poly2tri/ + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of Poly2Tri nor the names of its contributors may be + * used to endorse or promote products derived from this software without specific + * prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +using System; +using System.Collections.Generic; +using System.Text; + + +namespace Poly2Tri +{ + + /// + /// This is basically a light-weight version of the Polygon class, but with limited functionality and + /// used for different purposes. Nonetheless, for all intents and purposes, this should actually be + /// a polygon (though not a Polygon..) + /// + public class Contour : Point2DList, ITriangulatable, IEnumerable, IList + { + private List mHoles = new List(); + private ITriangulatable mParent = null; + private string mName = ""; + + public new TriangulationPoint this[int index] + { + get { return mPoints[index] as TriangulationPoint; } + set { mPoints[index] = value; } + } + public string Name { get { return mName; } set { mName = value; } } + + + public IList Triangles + { + get + { + throw new NotImplementedException("PolyHole.Triangles should never get called"); + } + private set { } + } + public TriangulationMode TriangulationMode { get { return mParent.TriangulationMode; } } + public string FileName { get { return mParent.FileName; } set { } } + public bool DisplayFlipX { get { return mParent.DisplayFlipX; } set { } } + public bool DisplayFlipY { get { return mParent.DisplayFlipY; } set { } } + public float DisplayRotate { get { return mParent.DisplayRotate; } set { } } + public double Precision { get { return mParent.Precision; } set { } } + public double MinX { get { return mBoundingBox.MinX; } } + public double MaxX { get { return mBoundingBox.MaxX; } } + public double MinY { get { return mBoundingBox.MinY; } } + public double MaxY { get { return mBoundingBox.MaxY; } } + public Rect2D Bounds { get { return mBoundingBox; } } + + + public Contour(ITriangulatable parent) + { + mParent = parent; + } + + + public Contour(ITriangulatable parent, IList points, Point2DList.WindingOrderType windingOrder) + { + // Currently assumes that input is pre-checked for validity + mParent = parent; + AddRange(points, windingOrder); + } + + + public override string ToString() + { + return mName + " : " + base.ToString(); + } + + + IEnumerator IEnumerable.GetEnumerator() + { + return new TriangulationPointEnumerator(mPoints); + } + + + public int IndexOf(TriangulationPoint p) + { + return mPoints.IndexOf(p); + } + + + public void Add(TriangulationPoint p) + { + Add(p, -1, true); + } + + + protected override void Add(Point2D p, int idx, bool bCalcWindingOrderAndEpsilon) + { + TriangulationPoint pt = null; + if (p is TriangulationPoint) + { + pt = p as TriangulationPoint; + } + else + { + pt = new TriangulationPoint(p.X, p.Y); + } + if (idx < 0) + { + mPoints.Add(pt); + } + else + { + mPoints.Insert(idx, pt); + } + mBoundingBox.AddPoint(pt); + if (bCalcWindingOrderAndEpsilon) + { + if (mWindingOrder == WindingOrderType.Unknown) + { + mWindingOrder = CalculateWindingOrder(); + } + mEpsilon = CalculateEpsilon(); + } + } + + + public override void AddRange(IEnumerator iter, WindingOrderType windingOrder) + { + if (iter == null) + { + return; + } + + if (mWindingOrder == WindingOrderType.Unknown && Count == 0) + { + mWindingOrder = windingOrder; + } + bool bReverseReadOrder = (WindingOrder != WindingOrderType.Unknown) && (windingOrder != WindingOrderType.Unknown) && (WindingOrder != windingOrder); + bool bAddedFirst = true; + int startCount = mPoints.Count; + iter.Reset(); + while (iter.MoveNext()) + { + TriangulationPoint pt = null; + if (iter.Current is TriangulationPoint) + { + pt = iter.Current as TriangulationPoint; + } + else + { + pt = new TriangulationPoint(iter.Current.X, iter.Current.Y); + } + if (!bAddedFirst) + { + bAddedFirst = true; + mPoints.Add(pt); + } + else if (bReverseReadOrder) + { + mPoints.Insert(startCount, pt); + } + else + { + mPoints.Add(pt); + } + mBoundingBox.AddPoint(iter.Current); + } + if (mWindingOrder == WindingOrderType.Unknown && windingOrder == WindingOrderType.Unknown) + { + mWindingOrder = CalculateWindingOrder(); + } + mEpsilon = CalculateEpsilon(); + } + + + public void AddRange(IList points, Point2DList.WindingOrderType windingOrder) + { + if (points == null || points.Count < 1) + { + return; + } + + if (mWindingOrder == Point2DList.WindingOrderType.Unknown && Count == 0) + { + mWindingOrder = windingOrder; + } + + int numPoints = points.Count; + bool bReverseReadOrder = (WindingOrder != WindingOrderType.Unknown) && (windingOrder != WindingOrderType.Unknown) && (WindingOrder != windingOrder); + for (int i = 0; i < numPoints; ++i) + { + int idx = i; + if (bReverseReadOrder) + { + idx = points.Count - i - 1; + } + Add(points[idx], -1, false); + } + if (mWindingOrder == WindingOrderType.Unknown) + { + mWindingOrder = CalculateWindingOrder(); + } + mEpsilon = CalculateEpsilon(); + } + + + public void Insert(int idx, TriangulationPoint p) + { + Add(p, idx, true); + } + + + public bool Remove(TriangulationPoint p) + { + return Remove(p as Point2D); + } + + + public bool Contains(TriangulationPoint p) + { + return mPoints.Contains(p); + } + + + public void CopyTo(TriangulationPoint[] array, int arrayIndex) + { + int numElementsToCopy = Math.Min(Count, array.Length - arrayIndex); + for (int i = 0; i < numElementsToCopy; ++i) + { + array[arrayIndex + i] = mPoints[i] as TriangulationPoint; + } + } + + + protected void AddHole(Contour c) + { + // no checking is done here as we rely on InitializeHoles for that + c.mParent = this; + mHoles.Add(c); + } + + + /// + /// returns number of holes that are actually holes, including all children of children, etc. Does NOT + /// include holes that are not actually holes. For example, if the parent is not a hole and this contour has + /// a hole that contains a hole, then the number of holes returned would be 2 - one for the current hole (because + /// the parent is NOT a hole and thus this hole IS a hole), and 1 for the child of the child. + /// + /// + /// + public int GetNumHoles(bool parentIsHole) + { + int numHoles = parentIsHole ? 0 : 1; + foreach (Contour c in mHoles) + { + numHoles += c.GetNumHoles(!parentIsHole); + } + + return numHoles; + } + + + /// + /// returns the basic number of child holes of THIS contour, not including any children of children, etc nor + /// examining whether any children are actual holes. + /// + /// + public int GetNumHoles() + { + return mHoles.Count; + } + + + public Contour GetHole(int idx) + { + if (idx < 0 || idx >= mHoles.Count) + { + return null; + } + + return mHoles[idx]; + } + + + public void GetActualHoles(bool parentIsHole, ref List holes) + { + if (parentIsHole) + { + holes.Add(this); + } + + foreach (Contour c in mHoles) + { + c.GetActualHoles(!parentIsHole, ref holes); + } + } + + + public List.Enumerator GetHoleEnumerator() + { + return mHoles.GetEnumerator(); + } + + + public void InitializeHoles(ConstrainedPointSet cps) + { + Contour.InitializeHoles(mHoles, this, cps); + foreach (Contour c in mHoles) + { + c.InitializeHoles(cps); + } + } + + + public static void InitializeHoles(List holes, ITriangulatable parent, ConstrainedPointSet cps) + { + int numHoles = holes.Count; + int holeIdx = 0; + + // pass 1 - remove duplicates + while (holeIdx < numHoles) + { + int hole2Idx = holeIdx + 1; + while (hole2Idx < numHoles) + { + bool bSamePolygon = PolygonUtil.PolygonsAreSame2D(holes[holeIdx], holes[hole2Idx]); + if (bSamePolygon) + { + // remove one of them + holes.RemoveAt(hole2Idx); + --numHoles; + } + else + { + ++hole2Idx; + } + } + ++holeIdx; + } + + // pass 2: Intersections and Containment + holeIdx = 0; + while (holeIdx < numHoles) + { + bool bIncrementHoleIdx = true; + int hole2Idx = holeIdx + 1; + while (hole2Idx < numHoles) + { + if (PolygonUtil.PolygonContainsPolygon(holes[holeIdx], holes[holeIdx].Bounds, holes[hole2Idx], holes[hole2Idx].Bounds, false)) + { + holes[holeIdx].AddHole(holes[hole2Idx]); + holes.RemoveAt(hole2Idx); + --numHoles; + } + else if (PolygonUtil.PolygonContainsPolygon(holes[hole2Idx], holes[hole2Idx].Bounds, holes[holeIdx], holes[holeIdx].Bounds, false)) + { + holes[hole2Idx].AddHole(holes[holeIdx]); + holes.RemoveAt(holeIdx); + --numHoles; + bIncrementHoleIdx = false; + break; + } + else + { + bool bIntersect = PolygonUtil.PolygonsIntersect2D(holes[holeIdx], holes[holeIdx].Bounds, holes[hole2Idx], holes[hole2Idx].Bounds); + if (bIntersect) + { + // this is actually an error condition + // fix by merging hole1 and hole2 into hole1 (including the holes inside hole2!) and delete hole2 + // Then, because hole1 is now changed, restart it's check. + PolygonOperationContext ctx = new PolygonOperationContext(); + if (!ctx.Init(PolygonUtil.PolyOperation.Union | PolygonUtil.PolyOperation.Intersect, holes[holeIdx], holes[hole2Idx])) + { + if (ctx.mError == PolygonUtil.PolyUnionError.Poly1InsidePoly2) + { + holes[hole2Idx].AddHole(holes[holeIdx]); + holes.RemoveAt(holeIdx); + --numHoles; + bIncrementHoleIdx = false; + break; + } + else + { + throw new Exception("PolygonOperationContext.Init had an error during initialization"); + } + } + PolygonUtil.PolyUnionError pue = PolygonUtil.PolygonOperation(ctx); + if (pue == PolygonUtil.PolyUnionError.None) + { + Point2DList union = ctx.Union; + Point2DList intersection = ctx.Intersect; + + // create a new contour for the union + Contour c = new Contour(parent); + c.AddRange(union); + c.Name = "(" + holes[holeIdx].Name + " UNION " + holes[hole2Idx].Name + ")"; + c.WindingOrder = Point2DList.WindingOrderType.Default; + + // add children from both of the merged contours + int numChildHoles = holes[holeIdx].GetNumHoles(); + for(int i = 0; i < numChildHoles; ++i) + { + c.AddHole(holes[holeIdx].GetHole(i)); + } + numChildHoles = holes[hole2Idx].GetNumHoles(); + for (int i = 0; i < numChildHoles; ++i) + { + c.AddHole(holes[hole2Idx].GetHole(i)); + } + + // make sure we preserve the contours of the intersection + Contour cInt = new Contour(c); + cInt.AddRange(intersection); + cInt.Name = "(" + holes[holeIdx].Name + " INTERSECT " + holes[hole2Idx].Name + ")"; + cInt.WindingOrder = Point2DList.WindingOrderType.Default; + c.AddHole(cInt); + + // replace the current contour with the merged contour + holes[holeIdx] = c; + + // toss the second contour + holes.RemoveAt(hole2Idx); + --numHoles; + + // current hole is "examined", so move to the next one + hole2Idx = holeIdx + 1; + } + else + { + throw new Exception("PolygonOperation had an error!"); + } + } + else + { + ++hole2Idx; + } + } + } + if (bIncrementHoleIdx) + { + ++holeIdx; + } + } + + numHoles = holes.Count; + holeIdx = 0; + while (holeIdx < numHoles) + { + int numPoints = holes[holeIdx].Count; + for (int i = 0; i < numPoints; ++i) + { + int j = holes[holeIdx].NextIndex(i); + uint constraintCode = TriangulationConstraint.CalculateContraintCode(holes[holeIdx][i], holes[holeIdx][j]); + TriangulationConstraint tc = null; + if (!cps.TryGetConstraint(constraintCode, out tc)) + { + tc = new TriangulationConstraint(holes[holeIdx][i], holes[holeIdx][j]); + cps.AddConstraint(tc); + } + + // replace the points in the holes with valid points + if (holes[holeIdx][i].VertexCode == tc.P.VertexCode) + { + holes[holeIdx][i] = tc.P; + } + else if (holes[holeIdx][j].VertexCode == tc.P.VertexCode) + { + holes[holeIdx][j] = tc.P; + } + if (holes[holeIdx][i].VertexCode == tc.Q.VertexCode) + { + holes[holeIdx][i] = tc.Q; + } + else if (holes[holeIdx][j].VertexCode == tc.Q.VertexCode) + { + holes[holeIdx][j] = tc.Q; + } + } + ++holeIdx; + } + } + + + public void Prepare(TriangulationContext tcx) + { + throw new NotImplementedException("PolyHole.Prepare should never get called"); + } + + + public void AddTriangle(DelaunayTriangle t) + { + throw new NotImplementedException("PolyHole.AddTriangle should never get called"); + } + + + public void AddTriangles(IEnumerable list) + { + throw new NotImplementedException("PolyHole.AddTriangles should never get called"); + } + + + public void ClearTriangles() + { + throw new NotImplementedException("PolyHole.ClearTriangles should never get called"); + } + + + public Point2D FindPointInContour() + { + if (Count < 3) + { + return null; + } + + // first try the simple approach: + Point2D p = GetCentroid(); + if (IsPointInsideContour(p)) + { + return p; + } + + // brute force it... + Random random = new Random(); + while (true) + { + p.X = (random.NextDouble() * (MaxX - MinX)) + MinX; + p.Y = (random.NextDouble() * (MaxY - MinY)) + MinY; + if (IsPointInsideContour(p)) + { + return p; + } + } + } + + + public bool IsPointInsideContour(Point2D p) + { + if (PolygonUtil.PointInPolygon2D(this, p)) + { + foreach (Contour c in mHoles) + { + if (c.IsPointInsideContour(p)) + { + return false; + } + } + + return true; + } + + return false; + } + + } +} diff --git a/Assets/Plugins/Poly2Tri/Triangulation/Polygon/Contour.cs.meta b/Assets/Plugins/Poly2Tri/Triangulation/Polygon/Contour.cs.meta new file mode 100644 index 0000000..7441fc9 --- /dev/null +++ b/Assets/Plugins/Poly2Tri/Triangulation/Polygon/Contour.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5dfd11dff63cdeb4f8543c5ee276d3f9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Poly2Tri/Triangulation/Polygon/Polygon.cs b/Assets/Plugins/Poly2Tri/Triangulation/Polygon/Polygon.cs new file mode 100644 index 0000000..6ba83ec --- /dev/null +++ b/Assets/Plugins/Poly2Tri/Triangulation/Polygon/Polygon.cs @@ -0,0 +1,409 @@ +/* Poly2Tri + * Copyright (c) 2009-2010, Poly2Tri Contributors + * http://code.google.com/p/poly2tri/ + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of Poly2Tri nor the names of its contributors may be + * used to endorse or promote products derived from this software without specific + * prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/// Changes from the Java version +/// Polygon constructors sprused up, checks for 3+ polys +/// Naming of everything +/// getTriangulationMode() -> TriangulationMode { get; } +/// Exceptions replaced +/// Future possibilities +/// We have a lot of Add/Clear methods -- we may prefer to just expose the container +/// Some self-explanatory methods may deserve commenting anyways + +using System; +using System.Collections.Generic; +using System.Linq; + + +namespace Poly2Tri +{ + public class Polygon : Point2DList, ITriangulatable, IEnumerable, IList + { + // ITriangulatable Implementation + protected Dictionary mPointMap = new Dictionary(); + public IList Points { get { return this; } } + protected List mTriangles; + public IList Triangles { get { return mTriangles; } } + public TriangulationMode TriangulationMode { get { return TriangulationMode.Polygon; } } + public string FileName { get; set; } + public bool DisplayFlipX { get; set; } + public bool DisplayFlipY { get; set; } + public float DisplayRotate { get; set; } + private double mPrecision = TriangulationPoint.kVertexCodeDefaultPrecision; + public double Precision { get { return mPrecision; } set { mPrecision = value; } } + public double MinX { get { return mBoundingBox.MinX; } } + public double MaxX { get { return mBoundingBox.MaxX; } } + public double MinY { get { return mBoundingBox.MinY; } } + public double MaxY { get { return mBoundingBox.MaxY; } } + public Rect2D Bounds { get { return mBoundingBox; } } + + // Point2DList overrides + public new TriangulationPoint this[int index] + { + get { return mPoints[index] as TriangulationPoint; } + set { mPoints[index] = value; } + } + + // Polygon Implementation + protected List mHoles; + public IList Holes { get { return mHoles; } } + protected List mSteinerPoints; + protected PolygonPoint _last; + + + + /// + /// Create a polygon from a list of at least 3 points with no duplicates. + /// + /// A list of unique points + public Polygon(IList points) + { + if (points.Count < 3) + { + throw new ArgumentException("List has fewer than 3 points", "points"); + } + + AddRange(points, WindingOrderType.Unknown); + } + + + /// + /// Create a polygon from a list of at least 3 points with no duplicates. + /// + /// A list of unique points. + public Polygon(IEnumerable points) + : this((points as IList) ?? points.ToArray()) + {} + + + /// + /// Create a polygon from a list of at least 3 points with no duplicates. + /// + /// A list of unique points. + public Polygon(params PolygonPoint[] points) + : this((IList)points) + {} + + + IEnumerator IEnumerable.GetEnumerator() + { + return new TriangulationPointEnumerator(mPoints); + } + + + public int IndexOf(TriangulationPoint p) + { + return mPoints.IndexOf(p); + } + + + public override void Add(Point2D p) + { + Add(p, -1, true); + } + + + public void Add(TriangulationPoint p) + { + Add(p, -1, true); + } + + + public void Add(PolygonPoint p) + { + Add(p, -1, true); + } + + + protected override void Add(Point2D p, int idx, bool bCalcWindingOrderAndEpsilon) + { + TriangulationPoint pt = p as TriangulationPoint; + if (pt == null) + { + // we only store TriangulationPoints and PolygonPoints in this class + return; + } + + // do not insert duplicate points + if (mPointMap.ContainsKey(pt.VertexCode)) + { + return; + } + mPointMap.Add(pt.VertexCode, pt); + + base.Add(p, idx, bCalcWindingOrderAndEpsilon); + + PolygonPoint pp = p as PolygonPoint; + if (pp != null) + { + pp.Previous = _last; + if (_last != null) + { + pp.Next = _last.Next; + _last.Next = pp; + } + _last = pp; + } + + return; + } + + + public void AddRange(IList points, Point2DList.WindingOrderType windingOrder) + { + if (points == null || points.Count < 1) + { + return; + } + + if (mWindingOrder == Point2DList.WindingOrderType.Unknown && Count == 0) + { + mWindingOrder = windingOrder; + } + int numPoints = points.Count; + bool bReverseReadOrder = (WindingOrder != WindingOrderType.Unknown) && (windingOrder != WindingOrderType.Unknown) && (WindingOrder != windingOrder); + for (int i = 0; i < numPoints; ++i) + { + int idx = i; + if (bReverseReadOrder) + { + idx = points.Count - i - 1; + } + Add(points[idx], -1, false); + } + if (mWindingOrder == WindingOrderType.Unknown) + { + mWindingOrder = CalculateWindingOrder(); + } + mEpsilon = CalculateEpsilon(); + } + + + public void AddRange(IList points, Point2DList.WindingOrderType windingOrder) + { + if (points == null || points.Count < 1) + { + return; + } + + if (mWindingOrder == Point2DList.WindingOrderType.Unknown && Count == 0) + { + mWindingOrder = windingOrder; + } + + int numPoints = points.Count; + bool bReverseReadOrder = (WindingOrder != WindingOrderType.Unknown) && (windingOrder != WindingOrderType.Unknown) && (WindingOrder != windingOrder); + for (int i = 0; i < numPoints; ++i) + { + int idx = i; + if (bReverseReadOrder) + { + idx = points.Count - i - 1; + } + Add(points[idx], -1, false); + } + if (mWindingOrder == WindingOrderType.Unknown) + { + mWindingOrder = CalculateWindingOrder(); + } + mEpsilon = CalculateEpsilon(); + } + + + public void Insert(int idx, TriangulationPoint p) + { + Add(p, idx, true); + } + + + public bool Remove(TriangulationPoint p) + { + return base.Remove(p); + } + + + /// + /// Removes a point from the polygon. Note this can be a somewhat expensive operation + /// as it must recalculate the bounding area from scratch. + /// + /// + public void RemovePoint(PolygonPoint p) + { + PolygonPoint next, prev; + + next = p.Next; + prev = p.Previous; + prev.Next = next; + next.Previous = prev; + mPoints.Remove(p); + + mBoundingBox.Clear(); + foreach (PolygonPoint tmp in mPoints) + { + mBoundingBox.AddPoint(tmp); + } + } + + + + public bool Contains(TriangulationPoint p) + { + return mPoints.Contains(p); + } + + + public void CopyTo(TriangulationPoint[] array, int arrayIndex) + { + int numElementsToCopy = Math.Min(Count, array.Length - arrayIndex); + for (int i = 0; i < numElementsToCopy; ++i) + { + array[arrayIndex + i] = mPoints[i] as TriangulationPoint; + } + } + + + public void AddSteinerPoint(TriangulationPoint point) + { + if (mSteinerPoints == null) + { + mSteinerPoints = new List(); + } + mSteinerPoints.Add(point); + } + + + public void AddSteinerPoints(List points) + { + if (mSteinerPoints == null) + { + mSteinerPoints = new List(); + } + mSteinerPoints.AddRange(points); + } + + + public void ClearSteinerPoints() + { + if (mSteinerPoints != null) + { + mSteinerPoints.Clear(); + } + } + + + /// + /// Add a hole to the polygon. + /// + /// A subtraction polygon fully contained inside this polygon. + public void AddHole(Polygon poly) + { + if (mHoles == null) + { + mHoles = new List(); + } + mHoles.Add(poly); + // XXX: tests could be made here to be sure it is fully inside + // addSubtraction( poly.getPoints() ); + } + + + public void AddTriangle(DelaunayTriangle t) + { + mTriangles.Add(t); + } + + + public void AddTriangles(IEnumerable list) + { + mTriangles.AddRange(list); + } + + + public void ClearTriangles() + { + if (mTriangles != null) + { + mTriangles.Clear(); + } + } + + + public bool IsPointInside(TriangulationPoint p) + { + return PolygonUtil.PointInPolygon2D(this, p); + } + + + /// + /// Creates constraints and populates the context with points + /// + /// The context + public void Prepare(TriangulationContext tcx) + { + if (mTriangles == null) + { + mTriangles = new List(mPoints.Count); + } + else + { + mTriangles.Clear(); + } + + // Outer constraints + for (int i = 0; i < mPoints.Count - 1; i++) + { + //tcx.NewConstraint(mPoints[i], mPoints[i + 1]); + tcx.NewConstraint(this[i], this[i + 1]); + } + tcx.NewConstraint(this[0], this[Count - 1]); + tcx.Points.AddRange(this); + + // Hole constraints + if (mHoles != null) + { + foreach (Polygon p in mHoles) + { + for (int i = 0; i < p.mPoints.Count - 1; i++) + { + tcx.NewConstraint(p[i], p[i + 1]); + } + tcx.NewConstraint(p[0], p[p.Count - 1]); + tcx.Points.AddRange(p); + } + } + + if (mSteinerPoints != null) + { + tcx.Points.AddRange(mSteinerPoints); + } + } + } +} diff --git a/Assets/Plugins/Poly2Tri/Triangulation/Polygon/Polygon.cs.meta b/Assets/Plugins/Poly2Tri/Triangulation/Polygon/Polygon.cs.meta new file mode 100644 index 0000000..87921f5 --- /dev/null +++ b/Assets/Plugins/Poly2Tri/Triangulation/Polygon/Polygon.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 98daeea2e71d727429a84a799a9b1706 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Poly2Tri/Triangulation/Polygon/PolygonPoint.cs b/Assets/Plugins/Poly2Tri/Triangulation/Polygon/PolygonPoint.cs new file mode 100644 index 0000000..fffa2f1 --- /dev/null +++ b/Assets/Plugins/Poly2Tri/Triangulation/Polygon/PolygonPoint.cs @@ -0,0 +1,56 @@ +/* Poly2Tri + * Copyright (c) 2009-2010, Poly2Tri Contributors + * http://code.google.com/p/poly2tri/ + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of Poly2Tri nor the names of its contributors may be + * used to endorse or promote products derived from this software without specific + * prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/// Changes from the Java version +/// Replaced get/set Next/Previous with attributes +/// Future possibilities +/// Documentation! + +namespace Poly2Tri +{ + public class PolygonPoint : TriangulationPoint + { + public PolygonPoint(double x, double y) : base(x, y) { } + + public PolygonPoint Next { get; set; } + public PolygonPoint Previous { get; set; } + + public static Point2D ToBasePoint(PolygonPoint p) + { + return (Point2D)p; + } + + public static TriangulationPoint ToTriangulationPoint(PolygonPoint p) + { + return (TriangulationPoint)p; + } + } +} diff --git a/Assets/Plugins/Poly2Tri/Triangulation/Polygon/PolygonPoint.cs.meta b/Assets/Plugins/Poly2Tri/Triangulation/Polygon/PolygonPoint.cs.meta new file mode 100644 index 0000000..d47f6e1 --- /dev/null +++ b/Assets/Plugins/Poly2Tri/Triangulation/Polygon/PolygonPoint.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 55fd89ec8383d3b48b01e6abebf915c5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Poly2Tri/Triangulation/Polygon/PolygonSet.cs b/Assets/Plugins/Poly2Tri/Triangulation/Polygon/PolygonSet.cs new file mode 100644 index 0000000..5ba1d0e --- /dev/null +++ b/Assets/Plugins/Poly2Tri/Triangulation/Polygon/PolygonSet.cs @@ -0,0 +1,60 @@ +/* Poly2Tri + * Copyright (c) 2009-2010, Poly2Tri Contributors + * http://code.google.com/p/poly2tri/ + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of Poly2Tri nor the names of its contributors may be + * used to endorse or promote products derived from this software without specific + * prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/// Changes from the Java version +/// Replaced getPolygons with attribute +/// Future possibilities +/// Replace Add(Polygon) with exposed container? +/// Replace entire class with HashSet ? + +using System.Collections.Generic; + +namespace Poly2Tri +{ + public class PolygonSet + { + protected List _polygons = new List(); + + public PolygonSet() { } + + public PolygonSet(Polygon poly) + { + _polygons.Add(poly); + } + + public void Add(Polygon p) + { + _polygons.Add(p); + } + + public IEnumerable Polygons { get { return _polygons; } } + } +} diff --git a/Assets/Plugins/Poly2Tri/Triangulation/Polygon/PolygonSet.cs.meta b/Assets/Plugins/Poly2Tri/Triangulation/Polygon/PolygonSet.cs.meta new file mode 100644 index 0000000..65a5352 --- /dev/null +++ b/Assets/Plugins/Poly2Tri/Triangulation/Polygon/PolygonSet.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8b9b966d2e3f8d543beed734daa9b289 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Poly2Tri/Triangulation/Polygon/PolygonUtil.cs b/Assets/Plugins/Poly2Tri/Triangulation/Polygon/PolygonUtil.cs new file mode 100644 index 0000000..622a844 --- /dev/null +++ b/Assets/Plugins/Poly2Tri/Triangulation/Polygon/PolygonUtil.cs @@ -0,0 +1,1876 @@ +/* Poly2Tri + * Copyright (c) 2009-2010, Poly2Tri Contributors + * http://code.google.com/p/poly2tri/ + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of Poly2Tri nor the names of its contributors may be + * used to endorse or promote products derived from this software without specific + * prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + + +/* + * The Following notice applies to the Method SplitComplexPolygon and the + * class SplitComplexPolygonNode. Both are altered only enough to convert to C# + * and take advantage of some of C#'s language features. Any errors + * are thus mine from the conversion and not Eric's. + * + * Copyright (c) 2007 Eric Jordan + * + * 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. + * */ + + +/* + * Portions of the following code (notably: the methods PolygonUnion, + * PolygonSubtract, PolygonIntersect, PolygonOperationContext.Init, + * PolygonOperationContext.VerticesIntersect, + * PolygonOperationContext.PointInPolygonAngle, and + * PolygonOperationContext.VectorAngle are from the Farseer Physics Engine 3.0 + * and are covered under the Microsoft Permissive License V1.1 + * (http://farseerphysics.codeplex.com/license) + * + * Microsoft Permissive License (Ms-PL) + * + * This license governs use of the accompanying software. If you use the + * software, you accept this license. If you do not accept the license, do not + * use the software. + * + * 1. Definitions + * + * The terms "reproduce," "reproduction," "derivative works," and + * "distribution" have the same meaning here as under U.S. copyright law. + * + * A "contribution" is the original software, or any additions or changes to + * the software. + * + * A "contributor" is any person that distributes its contribution under this + * license. + * + * "Licensed patents" are a contributor's patent claims that read directly on + * its contribution. + * + * 2. Grant of Rights + * + * (A) Copyright Grant- Subject to the terms of this license, including the + * license conditions and limitations in section 3, each contributor grants + * you a non-exclusive, worldwide, royalty-free copyright license to reproduce + * its contribution, prepare derivative works of its contribution, and + * distribute its contribution or any derivative works that you create. + * + * (B) Patent Grant- Subject to the terms of this license, including the + * license conditions and limitations in section 3, each contributor grants + * you a non-exclusive, worldwide, royalty-free license under its licensed + * patents to make, have made, use, sell, offer for sale, import, and/or + * otherwise dispose of its contribution in the software or derivative works + * of the contribution in the software. + * + * 3. Conditions and Limitations + * + * (A) No Trademark License- This license does not grant you rights to use + * any contributors' name, logo, or trademarks. + * + * (B) If you bring a patent claim against any contributor over patents that + * you claim are infringed by the software, your patent license from such + * contributor to the software ends automatically. + * + * (C) If you distribute any portion of the software, you must retain all + * copyright, patent, trademark, and attribution notices that are present + * in the software. + * + * (D) If you distribute any portion of the software in source code form, you + * may do so only under this license by including a complete copy of this + * license with your distribution. If you distribute any portion of the + * software in compiled or object code form, you may only do so under a + * license that complies with this license. + * + * (E) The software is licensed "as-is." You bear the risk of using it. The + * contributors give no express warranties, guarantees or conditions. You may + * have additional consumer rights under your local laws which this license + * cannot change. To the extent permitted under your local laws, the + * contributors exclude the implied warranties of merchantability, fitness for + * a particular purpose and non-infringement. + */ + +using System; +using System.Collections.Generic; +using System.Text; + + +namespace Poly2Tri +{ + public class PolygonUtil + { + public enum PolyUnionError + { + None, + NoIntersections, + Poly1InsidePoly2, + InfiniteLoop + } + + [Flags] + public enum PolyOperation : uint + { + None = 0, + Union = 1 << 0, + Intersect = 1 << 1, + Subtract = 1 << 2, + } + + + public static Point2DList.WindingOrderType CalculateWindingOrder(IList l) + { + double area = 0.0; + for (int i = 0; i < l.Count; i++) + { + int j = (i + 1) % l.Count; + area += l[i].X * l[j].Y; + area -= l[i].Y * l[j].X; + } + area /= 2.0f; + + // the sign of the 'area' of the polygon is all we are interested in. + if (area < 0.0) + { + return Point2DList.WindingOrderType.CW; + } + else if (area > 0.0) + { + return Point2DList.WindingOrderType.CCW; + } + + // error condition - not even verts to calculate, non-simple poly, etc. + return Point2DList.WindingOrderType.Unknown; + } + + + /// + /// Check if the polys are similar to within a tolerance (Doesn't include reflections, + /// but allows for the points to be numbered differently, but not reversed). + /// + /// + /// + /// + public static bool PolygonsAreSame2D(IList poly1, IList poly2) + { + int numVerts1 = poly1.Count; + int numVerts2 = poly2.Count; + + if (numVerts1 != numVerts2) + { + return false; + } + const double kEpsilon = 0.01; + const double kEpsilonSq = kEpsilon * kEpsilon; + + // Bounds the same to within tolerance, are there polys the same? + Point2D vdelta = new Point2D(0.0, 0.0); + for (int k = 0; k < numVerts2; ++k) + { + // Look for a match in verts2 to the first vertex in verts1 + vdelta.Set(poly1[0]); + vdelta.Subtract(poly2[k]); + + if (vdelta.MagnitudeSquared() < kEpsilonSq) + { + // Found match to the first point, now check the other points continuing round + // if the points don't match in the first direction we check, then it's possible + // that the polygons have a different winding order, so we check going round + // the opposite way as well + int matchedVertIndex = k; + bool bReverseSearch = false; + while (true) + { + bool bMatchFound = true; + for (int i = 1; i < numVerts1; ++i) + { + if (!bReverseSearch) + { + ++k; + } + else + { + --k; + if (k < 0) + { + k = numVerts2 - 1; + } + } + + vdelta.Set(poly1[i]); + vdelta.Subtract(poly2[k % numVerts2]); + if (vdelta.MagnitudeSquared() >= kEpsilonSq) + { + if (bReverseSearch) + { + // didn't find a match going in either direction, so the polygons are not the same + return false; + } + else + { + // mismatch in the first direction checked, so check the other direction. + k = matchedVertIndex; + bReverseSearch = true; + bMatchFound = false; + break; + } + } + } + + if (bMatchFound) + { + return true; + } + } + } + } + + return false; + } + + + public static bool PointInPolygon2D(IList polygon, Point2D p) + { + if (polygon == null || polygon.Count < 3) + { + return false; + } + + int numVerts = polygon.Count; + Point2D p0 = polygon[numVerts - 1]; + bool bYFlag0 = (p0.Y >= p.Y) ? true : false; + Point2D p1 = null; + + bool bInside = false; + for (int j = 0; j < numVerts; ++j) + { + p1 = polygon[j]; + bool bYFlag1 = (p1.Y >= p.Y) ? true : false; + if (bYFlag0 != bYFlag1) + { + if (((p1.Y - p.Y) * (p0.X - p1.X) >= (p1.X - p.X) * (p0.Y - p1.Y)) == bYFlag1) + { + bInside = !bInside; + } + } + + // Move to the next pair of vertices, retaining info as possible. + bYFlag0 = bYFlag1; + p0 = p1; + } + + return bInside; + } + + + // Given two polygons and their bounding rects, returns true if the two polygons intersect. + // This test will NOT determine if one of the two polygons is contained within the other or if the + // two polygons are similar - it will return false in all those cases. The only case it will return + // true for is if the two polygons actually intersect. + public static bool PolygonsIntersect2D( IList poly1, Rect2D boundRect1, + IList poly2, Rect2D boundRect2) + { + // do some quick tests first before doing any real work + if (poly1 == null || poly1.Count < 3 || boundRect1 == null || poly2 == null || poly2.Count < 3 || boundRect2 == null) + { + return false; + } + + if (!boundRect1.Intersects(boundRect2)) + { + return false; + } + + // We first check whether any edge of one poly intersects any edge of the other poly. If they do, + // then the two polys intersect. + + // Make the epsilon a function of the size of the polys. We could take the heights of the rects + // also into consideration here if needed; but, that should not usually be necessary. + double epsilon = Math.Max(Math.Min(boundRect1.Width, boundRect2.Width) * 0.001f, MathUtil.EPSILON); + + int numVerts1 = poly1.Count; + int numVerts2 = poly2.Count; + for (int i = 0; i < numVerts1; ++i) + { + int lineEndVert1 = i + 1; + if (lineEndVert1 == numVerts1) + { + lineEndVert1 = 0; + } + for (int j = 0; j < numVerts2; ++j) + { + int lineEndVert2 = j + 1; + if (lineEndVert2 == numVerts2) + { + lineEndVert2 = 0; + } + Point2D tmp = null; + if (TriangulationUtil.LinesIntersect2D(poly1[i], poly1[lineEndVert1], poly2[j], poly2[lineEndVert2], ref tmp, epsilon)) + { + return true; + } + } + } + + return false; + } + + + public bool PolygonContainsPolygon(IList poly1, Rect2D boundRect1, + IList poly2, Rect2D boundRect2) + { + return PolygonContainsPolygon(poly1, boundRect1, poly2, boundRect2, true); + } + + + /// + /// Checks to see if poly1 contains poly2. return true if so, false otherwise. + /// + /// If the polygons intersect, then poly1 cannot contain poly2 (or vice-versa for that matter) + /// Since the poly intersection test can be somewhat expensive, we'll only run it if the user + /// requests it. If runIntersectionTest is false, then it is assumed that the user has already + /// verified that the polygons do not intersect. If the polygons DO intersect and runIntersectionTest + /// is false, then the return value is meaningless. Caveat emptor. + /// + /// As an added bonus, just to cause more user-carnage, if runIntersectionTest is false, then the + /// boundRects are not used and can safely be passed in as nulls. However, if runIntersectionTest + /// is true and you pass nulls for boundRect1 or boundRect2, you will cause a program crash. + /// + /// Finally, the polygon points are assumed to be passed in Clockwise winding order. It is possible + /// that CounterClockwise ordering would work, but I have not verified the behavior in that case. + /// + /// + /// points of polygon1 + /// bounding rect of polygon1. Only used if runIntersectionTest is true + /// points of polygon2 + /// bounding rect of polygon2. Only used if runIntersectionTest is true + /// see summary above + /// true if poly1 fully contains poly2 + public static bool PolygonContainsPolygon(IList poly1, Rect2D boundRect1, + IList poly2, Rect2D boundRect2, + bool runIntersectionTest) + { + // quick early-out tests + if (poly1 == null || poly1.Count < 3 || poly2 == null || poly2.Count < 3) + { + return false; + } + + if (runIntersectionTest) + { + // make sure the polygons are not actually the same... + if (poly1.Count == poly2.Count) + { + // Check if the polys are similar to within a tolerance (Doesn't include reflections, + // but allows for the points to be numbered differently) + if (PolygonUtil.PolygonsAreSame2D(poly1, poly2)) + { + return false; + } + } + + bool bIntersect = PolygonUtil.PolygonsIntersect2D(poly1, boundRect1, poly2, boundRect2); + if (bIntersect) + { + return false; + } + } + + // Since we (now) know that the polygons don't intersect and they are not the same, we can just do a + // single check to see if ANY point in poly2 is inside poly1. If so, then all points of poly2 + // are inside poly1. If not, then ALL points of poly2 are outside poly1. + if (PolygonUtil.PointInPolygon2D(poly1, poly2[0])) + { + return true; + } + + return false; + } + + + + //////////////////////////////////////////////////////////////////////////////// + // ClipPolygonToEdge2D + // + // This function clips a polygon against an edge. The portion of the polygon + // which is to the left of the edge (while going from edgeBegin to edgeEnd) + // is returned in "outPoly". Note that the clipped polygon may have more vertices + // than the input polygon. Make sure that outPolyArraySize is sufficiently large. + // Otherwise, you may get incorrect results and may be an assert (hopefully, no crash). + // Pass in the actual size of the array in "outPolyArraySize". + // + // Read Sutherland-Hidgman algorithm description in Foley & van Dam book for + // details about this. + // + /////////////////////////////////////////////////////////////////////////// + public static void ClipPolygonToEdge2D( Point2D edgeBegin, + Point2D edgeEnd, + IList poly, + out List outPoly) + { + outPoly = null; + if (edgeBegin == null || + edgeEnd == null || + poly == null || + poly.Count < 3) + { + return; + } + + outPoly = new List(); + int lastVertex = poly.Count - 1; + Point2D edgeRayVector = new Point2D(edgeEnd.X - edgeBegin.X, edgeEnd.Y - edgeBegin.Y); + // Note: >= 0 as opposed to <= 0 is intentional. We are + // dealing with x and z here. And in our case, z axis goes + // downward while the x axis goes rightward. + //bool bLastVertexIsToRight = TriangulationUtil.PointRelativeToLine2D(poly[lastVertex], edgeBegin, edgeEnd) >= 0; + bool bLastVertexIsToRight = TriangulationUtil.Orient2d(edgeBegin, edgeEnd, poly[lastVertex]) == Orientation.CW ? true : false; + Point2D tempRay = new Point2D(0.0, 0.0); + + for (int curVertex = 0; curVertex < poly.Count; curVertex++) + { + //bool bCurVertexIsToRight = TriangulationUtil.PointRelativeToLine2D(poly[curVertex], edgeBegin, edgeEnd) >= 0; + bool bCurVertexIsToRight = TriangulationUtil.Orient2d(edgeBegin, edgeEnd, poly[curVertex]) == Orientation.CW ? true : false; + if (bCurVertexIsToRight) + { + if (bLastVertexIsToRight) + { + outPoly.Add(poly[curVertex]); + } + else + { + tempRay.Set(poly[curVertex].X - poly[lastVertex].X, poly[curVertex].Y - poly[lastVertex].Y); + Point2D ptIntersection = new Point2D(0.0, 0.0); + bool bIntersect = TriangulationUtil.RaysIntersect2D(poly[lastVertex], tempRay, edgeBegin, edgeRayVector, ref ptIntersection); + if (bIntersect) + { + outPoly.Add(ptIntersection); + outPoly.Add(poly[curVertex]); + } + } + } + else if (bLastVertexIsToRight) + { + tempRay.Set(poly[curVertex].X - poly[lastVertex].X, poly[curVertex].Y - poly[lastVertex].Y); + Point2D ptIntersection = new Point2D(0.0, 0.0); + bool bIntersect = TriangulationUtil.RaysIntersect2D(poly[lastVertex], tempRay, edgeBegin, edgeRayVector, ref ptIntersection); + if (bIntersect) + { + outPoly.Add(ptIntersection); + } + } + + lastVertex = curVertex; + bLastVertexIsToRight = bCurVertexIsToRight; + } + } + + + public static void ClipPolygonToPolygon(IList poly, IList clipPoly, out List outPoly) + { + outPoly = null; + if (poly == null || poly.Count < 3 || clipPoly == null || clipPoly.Count < 3) + { + return; + } + + outPoly = new List(poly); + int numClipVertices = clipPoly.Count; + int lastVertex = numClipVertices - 1; + + // The algorithm keeps clipping the polygon against each edge of "clipPoly". + for (int curVertex = 0; curVertex < numClipVertices; curVertex++) + { + List clippedPoly = null; + Point2D edgeBegin = clipPoly[lastVertex]; + Point2D edgeEnd = clipPoly[curVertex]; + PolygonUtil.ClipPolygonToEdge2D(edgeBegin, edgeEnd, outPoly, out clippedPoly); + outPoly.Clear(); + outPoly.AddRange(clippedPoly); + + lastVertex = curVertex; + } + } + + + /// Merges two polygons, given that they intersect. + /// + /// The first polygon. + /// The second polygon. + /// The union of the two polygons + /// The error returned from union + public static PolygonUtil.PolyUnionError PolygonUnion(Point2DList polygon1, Point2DList polygon2, out Point2DList union) + { + PolygonOperationContext ctx = new PolygonOperationContext(); + ctx.Init(PolygonUtil.PolyOperation.Union, polygon1, polygon2); + PolygonUnionInternal(ctx); + union = ctx.Union; + return ctx.mError; + } + + + protected static void PolygonUnionInternal(PolygonOperationContext ctx) + { + Point2DList union = ctx.Union; + if (ctx.mStartingIndex == -1) + { + switch (ctx.mError) + { + case PolygonUtil.PolyUnionError.NoIntersections: + case PolygonUtil.PolyUnionError.InfiniteLoop: + return; + case PolygonUtil.PolyUnionError.Poly1InsidePoly2: + union.AddRange(ctx.mOriginalPolygon2); + return; + } + } + + Point2DList currentPoly = ctx.mPoly1; + Point2DList otherPoly = ctx.mPoly2; + List currentPolyVectorAngles = ctx.mPoly1VectorAngles; + + // Store the starting vertex so we can refer to it later. + Point2D startingVertex = ctx.mPoly1[ctx.mStartingIndex]; + int currentIndex = ctx.mStartingIndex; + int firstPoly2Index = -1; + union.Clear(); + + do + { + // Add the current vertex to the final union + union.Add(currentPoly[currentIndex]); + + foreach (EdgeIntersectInfo intersect in ctx.mIntersections) + { + // If the current point is an intersection point + if (currentPoly[currentIndex].Equals(intersect.IntersectionPoint, currentPoly.Epsilon)) + { + // Make sure we want to swap polygons here. + int otherIndex = otherPoly.IndexOf(intersect.IntersectionPoint); + + // If the next vertex, if we do swap, is not inside the current polygon, + // then its safe to swap, otherwise, just carry on with the current poly. + int comparePointIndex = otherPoly.NextIndex(otherIndex); + Point2D comparePoint = otherPoly[comparePointIndex]; + bool bPointInPolygonAngle = false; + if (currentPolyVectorAngles[comparePointIndex] == -1) + { + bPointInPolygonAngle = ctx.PointInPolygonAngle(comparePoint, currentPoly); + currentPolyVectorAngles[comparePointIndex] = bPointInPolygonAngle ? 1 : 0; + } + else + { + bPointInPolygonAngle = (currentPolyVectorAngles[comparePointIndex] == 1) ? true : false; + } + + if (!bPointInPolygonAngle) + { + // switch polygons + if (currentPoly == ctx.mPoly1) + { + currentPoly = ctx.mPoly2; + currentPolyVectorAngles = ctx.mPoly2VectorAngles; + otherPoly = ctx.mPoly1; + if (firstPoly2Index < 0) + { + firstPoly2Index = otherIndex; + } + } + else + { + currentPoly = ctx.mPoly1; + currentPolyVectorAngles = ctx.mPoly1VectorAngles; + otherPoly = ctx.mPoly2; + } + + // set currentIndex + currentIndex = otherIndex; + + // Stop checking intersections for this point. + break; + } + } + } + + // Move to next index + currentIndex = currentPoly.NextIndex(currentIndex); + + if (currentPoly == ctx.mPoly1) + { + if (currentIndex == 0) + { + break; + } + } + else + { + if (firstPoly2Index >= 0 && currentIndex == firstPoly2Index) + { + break; + } + } + } while ((currentPoly[currentIndex] != startingVertex) && (union.Count <= (ctx.mPoly1.Count + ctx.mPoly2.Count))); + + // If the number of vertices in the union is more than the combined vertices + // of the input polygons, then something is wrong and the algorithm will + // loop forever. Luckily, we check for that. + if (union.Count > (ctx.mPoly1.Count + ctx.mPoly2.Count)) + { + ctx.mError = PolygonUtil.PolyUnionError.InfiniteLoop; + } + + return; + } + + + /// + /// Finds the intersection between two polygons. + /// + /// The first polygon. + /// The second polygon. + /// The intersection of the two polygons + /// error code + public static PolygonUtil.PolyUnionError PolygonIntersect(Point2DList polygon1, Point2DList polygon2, out Point2DList intersectOut) + { + PolygonOperationContext ctx = new PolygonOperationContext(); + ctx.Init(PolygonUtil.PolyOperation.Intersect, polygon1, polygon2); + PolygonIntersectInternal(ctx); + intersectOut = ctx.Intersect; + return ctx.mError; + } + + + protected static void PolygonIntersectInternal(PolygonOperationContext ctx) + { + Point2DList intersectOut = ctx.Intersect; + if (ctx.mStartingIndex == -1) + { + switch (ctx.mError) + { + case PolygonUtil.PolyUnionError.NoIntersections: + case PolygonUtil.PolyUnionError.InfiniteLoop: + return; + case PolygonUtil.PolyUnionError.Poly1InsidePoly2: + intersectOut.AddRange(ctx.mOriginalPolygon2); + return; + } + } + + Point2DList currentPoly = ctx.mPoly1; + Point2DList otherPoly = ctx.mPoly2; + List currentPolyVectorAngles = ctx.mPoly1VectorAngles; + + // Store the starting vertex so we can refer to it later. + int currentIndex = ctx.mPoly1.IndexOf(ctx.mIntersections[0].IntersectionPoint); + Point2D startingVertex = ctx.mPoly1[currentIndex]; + int firstPoly1Index = currentIndex; + int firstPoly2Index = -1; + intersectOut.Clear(); + + do + { + // Add the current vertex to the final intersection + if (intersectOut.Contains(currentPoly[currentIndex])) + { + // This can happen when the two polygons only share a single edge, and neither is inside the other + break; + } + intersectOut.Add(currentPoly[currentIndex]); + + foreach (EdgeIntersectInfo intersect in ctx.mIntersections) + { + // If the current point is an intersection point + if (currentPoly[currentIndex].Equals(intersect.IntersectionPoint, currentPoly.Epsilon)) + { + // Make sure we want to swap polygons here. + int otherIndex = otherPoly.IndexOf(intersect.IntersectionPoint); + + // If the next vertex, if we do swap, is inside the current polygon, + // then its safe to swap, otherwise, just carry on with the current poly. + int comparePointIndex = otherPoly.NextIndex(otherIndex); + Point2D comparePoint = otherPoly[comparePointIndex]; + bool bPointInPolygonAngle = false; + if (currentPolyVectorAngles[comparePointIndex] == -1) + { + bPointInPolygonAngle = ctx.PointInPolygonAngle(comparePoint, currentPoly); + currentPolyVectorAngles[comparePointIndex] = bPointInPolygonAngle ? 1 : 0; + } + else + { + bPointInPolygonAngle = (currentPolyVectorAngles[comparePointIndex] == 1) ? true : false; + } + + if (bPointInPolygonAngle) + { + // switch polygons + if (currentPoly == ctx.mPoly1) + { + currentPoly = ctx.mPoly2; + currentPolyVectorAngles = ctx.mPoly2VectorAngles; + otherPoly = ctx.mPoly1; + if (firstPoly2Index < 0) + { + firstPoly2Index = otherIndex; + } + } + else + { + currentPoly = ctx.mPoly1; + currentPolyVectorAngles = ctx.mPoly1VectorAngles; + otherPoly = ctx.mPoly2; + } + + // set currentIndex + currentIndex = otherIndex; + + // Stop checking intersections for this point. + break; + } + } + } + + // Move to next index + currentIndex = currentPoly.NextIndex(currentIndex); + + if (currentPoly == ctx.mPoly1) + { + if (currentIndex == firstPoly1Index) + { + break; + } + } + else + { + if (firstPoly2Index >= 0 && currentIndex == firstPoly2Index) + { + break; + } + } + } while ((currentPoly[currentIndex] != startingVertex) && (intersectOut.Count <= (ctx.mPoly1.Count + ctx.mPoly2.Count))); + + // If the number of vertices in the union is more than the combined vertices + // of the input polygons, then something is wrong and the algorithm will + // loop forever. Luckily, we check for that. + if (intersectOut.Count > (ctx.mPoly1.Count + ctx.mPoly2.Count)) + { + ctx.mError = PolygonUtil.PolyUnionError.InfiniteLoop; + } + + return; + } + + + /// + /// Subtracts one polygon from another. + /// + /// The base polygon. + /// The polygon to subtract from the base. + /// The result of the polygon subtraction + /// error code + public static PolygonUtil.PolyUnionError PolygonSubtract(Point2DList polygon1, Point2DList polygon2, out Point2DList subtract) + { + PolygonOperationContext ctx = new PolygonOperationContext(); + ctx.Init(PolygonUtil.PolyOperation.Subtract, polygon1, polygon2); + PolygonSubtractInternal(ctx); + subtract = ctx.Subtract; + return ctx.mError; + } + + + public static void PolygonSubtractInternal(PolygonOperationContext ctx) + { + Point2DList subtract = ctx.Subtract; + if (ctx.mStartingIndex == -1) + { + switch (ctx.mError) + { + case PolygonUtil.PolyUnionError.NoIntersections: + case PolygonUtil.PolyUnionError.InfiniteLoop: + case PolygonUtil.PolyUnionError.Poly1InsidePoly2: + return; + } + } + + Point2DList currentPoly = ctx.mPoly1; + Point2DList otherPoly = ctx.mPoly2; + List currentPolyVectorAngles = ctx.mPoly1VectorAngles; + + // Store the starting vertex so we can refer to it later. + Point2D startingVertex = ctx.mPoly1[ctx.mStartingIndex]; + int currentIndex = ctx.mStartingIndex; + subtract.Clear(); + + // Trace direction + bool forward = true; + + do + { + // Add the current vertex to the final union + subtract.Add(currentPoly[currentIndex]); + + foreach (EdgeIntersectInfo intersect in ctx.mIntersections) + { + // If the current point is an intersection point + if (currentPoly[currentIndex].Equals(intersect.IntersectionPoint, currentPoly.Epsilon)) + { + // Make sure we want to swap polygons here. + int otherIndex = otherPoly.IndexOf(intersect.IntersectionPoint); + + //Point2D otherVertex; + if (forward) + { + // If the next vertex, if we do swap, is inside the current polygon, + // then its safe to swap, otherwise, just carry on with the current poly. + int compareIndex = otherPoly.PreviousIndex(otherIndex); + Point2D compareVertex = otherPoly[compareIndex]; + bool bPointInPolygonAngle = false; + if (currentPolyVectorAngles[compareIndex] == -1) + { + bPointInPolygonAngle = ctx.PointInPolygonAngle(compareVertex, currentPoly); + currentPolyVectorAngles[compareIndex] = bPointInPolygonAngle ? 1 : 0; + } + else + { + bPointInPolygonAngle = (currentPolyVectorAngles[compareIndex] == 1) ? true : false; + } + + if (bPointInPolygonAngle) + { + // switch polygons + if (currentPoly == ctx.mPoly1) + { + currentPoly = ctx.mPoly2; + currentPolyVectorAngles = ctx.mPoly2VectorAngles; + otherPoly = ctx.mPoly1; + } + else + { + currentPoly = ctx.mPoly1; + currentPolyVectorAngles = ctx.mPoly1VectorAngles; + otherPoly = ctx.mPoly2; + } + + // set currentIndex + currentIndex = otherIndex; + + // Reverse direction + forward = !forward; + + // Stop checking ctx.mIntersections for this point. + break; + } + } + else + { + // If the next vertex, if we do swap, is outside the current polygon, + // then its safe to swap, otherwise, just carry on with the current poly. + int compareIndex = otherPoly.NextIndex(otherIndex); + Point2D compareVertex = otherPoly[compareIndex]; + bool bPointInPolygonAngle = false; + if (currentPolyVectorAngles[compareIndex] == -1) + { + bPointInPolygonAngle = ctx.PointInPolygonAngle(compareVertex, currentPoly); + currentPolyVectorAngles[compareIndex] = bPointInPolygonAngle ? 1 : 0; + } + else + { + bPointInPolygonAngle = (currentPolyVectorAngles[compareIndex] == 1) ? true : false; + } + + if (!bPointInPolygonAngle) + { + // switch polygons + if (currentPoly == ctx.mPoly1) + { + currentPoly = ctx.mPoly2; + currentPolyVectorAngles = ctx.mPoly2VectorAngles; + otherPoly = ctx.mPoly1; + } + else + { + currentPoly = ctx.mPoly1; + currentPolyVectorAngles = ctx.mPoly1VectorAngles; + otherPoly = ctx.mPoly2; + } + + // set currentIndex + currentIndex = otherIndex; + + // Reverse direction + forward = !forward; + + // Stop checking intersections for this point. + break; + } + } + } + } + + if (forward) + { + // Move to next index + currentIndex = currentPoly.NextIndex(currentIndex); + } + else + { + currentIndex = currentPoly.PreviousIndex(currentIndex); + } + } while ((currentPoly[currentIndex] != startingVertex) && (subtract.Count <= (ctx.mPoly1.Count + ctx.mPoly2.Count))); + + + // If the number of vertices in the union is more than the combined vertices + // of the input polygons, then something is wrong and the algorithm will + // loop forever. Luckily, we check for that. + if (subtract.Count > (ctx.mPoly1.Count + ctx.mPoly2.Count)) + { + ctx.mError = PolygonUtil.PolyUnionError.InfiniteLoop; + } + + return; + } + + + /// + /// Performs one or more polygon operations on the 2 provided polygons + /// + /// The first polygon. + /// The second polygon + /// The result of the polygon subtraction + /// error code + public static PolygonUtil.PolyUnionError PolygonOperation(PolygonUtil.PolyOperation operations, Point2DList polygon1, Point2DList polygon2, out Dictionary results) + { + PolygonOperationContext ctx = new PolygonOperationContext(); + ctx.Init(operations, polygon1, polygon2); + results = ctx.mOutput; + return PolygonUtil.PolygonOperation(ctx); + } + + + public static PolygonUtil.PolyUnionError PolygonOperation(PolygonOperationContext ctx) + { + if ((ctx.mOperations & PolygonUtil.PolyOperation.Union) == PolygonUtil.PolyOperation.Union) + { + PolygonUtil.PolygonUnionInternal(ctx); + } + if ((ctx.mOperations & PolygonUtil.PolyOperation.Intersect) == PolygonUtil.PolyOperation.Intersect) + { + PolygonUtil.PolygonIntersectInternal(ctx); + } + if ((ctx.mOperations & PolygonUtil.PolyOperation.Subtract) == PolygonUtil.PolyOperation.Subtract) + { + PolygonUtil.PolygonSubtractInternal(ctx); + } + + return ctx.mError; + } + + + /// + /// Trace the edge of a non-simple polygon and return a simple polygon. + /// + ///Method: + ///Start at vertex with minimum y (pick maximum x one if there are two). + ///We aim our "lastDir" vector at (1.0, 0) + ///We look at the two rays going off from our start vertex, and follow whichever + ///has the smallest angle (in -Pi . Pi) wrt lastDir ("rightest" turn) + /// + ///Loop until we hit starting vertex: + /// + ///We add our current vertex to the list. + ///We check the seg from current vertex to next vertex for intersections + /// - if no intersections, follow to next vertex and continue + /// - if intersections, pick one with minimum distance + /// - if more than one, pick one with "rightest" next point (two possibilities for each) + /// + /// + /// + /// + public static List SplitComplexPolygon(Point2DList verts, double epsilon) + { + int numVerts = verts.Count; + int nNodes = 0; + List nodes = new List(); + + //Add base nodes (raw outline) + for (int i = 0; i < verts.Count; ++i) + { + SplitComplexPolygonNode newNode = new SplitComplexPolygonNode(new Point2D(verts[i].X, verts[i].Y)); + nodes.Add(newNode); + } + for (int i = 0; i < verts.Count; ++i) + { + int iplus = (i == numVerts - 1) ? 0 : i + 1; + int iminus = (i == 0) ? numVerts - 1 : i - 1; + nodes[i].AddConnection(nodes[iplus]); + nodes[i].AddConnection(nodes[iminus]); + } + nNodes = nodes.Count; + + //Process intersection nodes - horribly inefficient + bool dirty = true; + int counter = 0; + while (dirty) + { + dirty = false; + for (int i = 0; !dirty && i < nNodes; ++i) + { + for (int j = 0; !dirty && j < nodes[i].NumConnected; ++j) + { + for (int k = 0; !dirty && k < nNodes; ++k) + { + if (k == i || nodes[k] == nodes[i][j]) + { + continue; + } + for (int l = 0; !dirty && l < nodes[k].NumConnected; ++l) + { + if (nodes[k][l] == nodes[i][j] || nodes[k][l] == nodes[i]) + { + continue; + } + //Check intersection + Point2D intersectPt = new Point2D(); + //if (counter > 100) printf("checking intersection: %d, %d, %d, %d\n",i,j,k,l); + bool crosses = TriangulationUtil.LinesIntersect2D( nodes[i].Position, + nodes[i][j].Position, + nodes[k].Position, + nodes[k][l].Position, + true, true, true, + ref intersectPt, + epsilon); + if (crosses) + { + /*if (counter > 100) { + printf("Found crossing at %f, %f\n",intersectPt.x, intersectPt.y); + printf("Locations: %f,%f - %f,%f | %f,%f - %f,%f\n", + nodes[i].position.x, nodes[i].position.y, + nodes[i].connected[j].position.x, nodes[i].connected[j].position.y, + nodes[k].position.x,nodes[k].position.y, + nodes[k].connected[l].position.x,nodes[k].connected[l].position.y); + printf("Memory addresses: %d, %d, %d, %d\n",(int)&nodes[i],(int)nodes[i].connected[j],(int)&nodes[k],(int)nodes[k].connected[l]); + }*/ + dirty = true; + //Destroy and re-hook connections at crossing point + SplitComplexPolygonNode intersectionNode = new SplitComplexPolygonNode(intersectPt); + int idx = nodes.IndexOf(intersectionNode); + if (idx >= 0 && idx < nodes.Count) + { + intersectionNode = nodes[idx]; + } + else + { + nodes.Add(intersectionNode); + nNodes = nodes.Count; + } + + SplitComplexPolygonNode nodei = nodes[i]; + SplitComplexPolygonNode connij = nodes[i][j]; + SplitComplexPolygonNode nodek = nodes[k]; + SplitComplexPolygonNode connkl = nodes[k][l]; + connij.RemoveConnection(nodei); + nodei.RemoveConnection(connij); + connkl.RemoveConnection(nodek); + nodek.RemoveConnection(connkl); + if (!intersectionNode.Position.Equals(nodei.Position, epsilon)) + { + intersectionNode.AddConnection(nodei); + nodei.AddConnection(intersectionNode); + } + if (!intersectionNode.Position.Equals(nodek.Position, epsilon)) + { + intersectionNode.AddConnection(nodek); + nodek.AddConnection(intersectionNode); + } + if (!intersectionNode.Position.Equals(connij.Position, epsilon)) + { + intersectionNode.AddConnection(connij); + connij.AddConnection(intersectionNode); + } + if (!intersectionNode.Position.Equals(connkl.Position, epsilon)) + { + intersectionNode.AddConnection(connkl); + connkl.AddConnection(intersectionNode); + } + } + } + } + } + } + ++counter; + //if (counter > 100) printf("Counter: %d\n",counter); + } + + // /* + // // Debugging: check for connection consistency + // for (int i=0; i 1) + { + minY = nodes[i].Position.Y; + minYIndex = i; + maxX = nodes[i].Position.X; + } + else if (nodes[i].Position.Y == minY && nodes[i].Position.X > maxX && nodes[i].NumConnected > 1) + { + minYIndex = i; + maxX = nodes[i].Position.X; + } + } + + Point2D origDir = new Point2D(1.0f, 0.0f); + List resultVecs = new List(); + SplitComplexPolygonNode currentNode = nodes[minYIndex]; + SplitComplexPolygonNode startNode = currentNode; + //Debug.Assert(currentNode.nConnected > 0); + SplitComplexPolygonNode nextNode = currentNode.GetRightestConnection(origDir); + if (nextNode == null) + { + // Borked, clean up our mess and return + return PolygonUtil.SplitComplexPolygonCleanup(verts); + } + + resultVecs.Add(startNode.Position); + while (nextNode != startNode) + { + if (resultVecs.Count > (4 * nNodes)) + { + //printf("%d, %d, %d\n",(int)startNode,(int)currentNode,(int)nextNode); + //printf("%f, %f . %f, %f\n",currentNode.position.x,currentNode.position.y, nextNode.position.x, nextNode.position.y); + //verts.printFormatted(); + //printf("Dumping connection graph: \n"); + //for (int i=0; i SplitComplexPolygonCleanup(IList orig) + { + List l = new List(); + Point2DList origP2DL = new Point2DList(orig); + l.Add(origP2DL); + int listIdx = 0; + int numLists = l.Count; + while (listIdx < numLists) + { + int numPoints = l[listIdx].Count; + for (int i = 0; i < numPoints; ++i) + { + for (int j = i + 1; j < numPoints; ++j) + { + if (l[listIdx][i].Equals(l[listIdx][j], origP2DL.Epsilon)) + { + // found a self-intersection loop - split it off into it's own list + int numToRemove = j - i; + Point2DList newList = new Point2DList(); + for (int k = i + 1; k <= j; ++k) + { + newList.Add(l[listIdx][k]); + } + l[listIdx].RemoveRange(i + 1, numToRemove); + l.Add(newList); + ++numLists; + numPoints -= numToRemove; + j = i + 1; + } + } + } + l[listIdx].Simplify(); + ++listIdx; + } + + return l; + } + + } + + + public class EdgeIntersectInfo + { + public EdgeIntersectInfo(Edge edgeOne, Edge edgeTwo, Point2D intersectionPoint) + { + EdgeOne = edgeOne; + EdgeTwo = edgeTwo; + IntersectionPoint = intersectionPoint; + } + + public Edge EdgeOne { get; private set; } + public Edge EdgeTwo { get; private set; } + public Point2D IntersectionPoint { get; private set; } + } + + + public class SplitComplexPolygonNode + { + /* + * Given sines and cosines, tells if A's angle is less than B's on -Pi, Pi + * (in other words, is A "righter" than B) + */ + private List mConnected = new List(); + private Point2D mPosition = null; + + public int NumConnected { get { return mConnected.Count; } } + public Point2D Position { get { return mPosition; } set { mPosition = value; } } + public SplitComplexPolygonNode this[int index] + { + get { return mConnected[index]; } + } + + + public SplitComplexPolygonNode() + { + } + + public SplitComplexPolygonNode(Point2D pos) + { + mPosition = pos; + } + + + public override bool Equals(Object obj) + { + SplitComplexPolygonNode pn = obj as SplitComplexPolygonNode; + if (pn == null) + { + return base.Equals(obj); + } + + return Equals(pn); + } + + + public bool Equals(SplitComplexPolygonNode pn) + { + if ((Object)pn == null) + { + return false; + } + if (mPosition == null || pn.Position == null) + { + return false; + } + + return mPosition.Equals(pn.Position); + } + + + public override int GetHashCode() + { + return base.GetHashCode(); + } + + public static bool operator ==(SplitComplexPolygonNode lhs, SplitComplexPolygonNode rhs) { if ((object)lhs != null) { return lhs.Equals(rhs); } if ((Object)rhs == null) { return true; } else { return false; } } + public static bool operator !=(SplitComplexPolygonNode lhs, SplitComplexPolygonNode rhs) { if ((object)lhs != null) { return !lhs.Equals(rhs); } if ((Object)rhs == null) { return false; } else { return true; } } + + public override string ToString() + { + StringBuilder sb = new StringBuilder(256); + sb.Append(mPosition.ToString()); + sb.Append(" -> "); + for (int i = 0; i < NumConnected; ++i) + { + if (i != 0) + { + sb.Append(", "); + } + sb.Append(mConnected[i].Position.ToString()); + } + + return sb.ToString(); + } + + + private bool IsRighter(double sinA, double cosA, double sinB, double cosB) + { + if (sinA < 0) + { + if (sinB > 0 || cosA <= cosB) + { + return true; + } + else + { + return false; + } + } + else + { + if (sinB < 0 || cosA <= cosB) + { + return false; + } + else + { + return true; + } + } + } + + //Fix for obnoxious behavior for the % operator for negative numbers... + private int remainder(int x, int modulus) + { + int rem = x % modulus; + while (rem < 0) + { + rem += modulus; + } + return rem; + } + + public void AddConnection(SplitComplexPolygonNode toMe) + { + // Ignore duplicate additions + if (!mConnected.Contains(toMe) && toMe != this) + { + mConnected.Add(toMe); + } + } + + public void RemoveConnection(SplitComplexPolygonNode fromMe) + { + mConnected.Remove(fromMe); + } + + private void RemoveConnectionByIndex(int index) + { + if (index < 0 || index >= mConnected.Count) + { + return; + } + mConnected.RemoveAt(index); + } + + public void ClearConnections() + { + mConnected.Clear(); + } + + private bool IsConnectedTo(SplitComplexPolygonNode me) + { + return mConnected.Contains(me); + } + + public SplitComplexPolygonNode GetRightestConnection(SplitComplexPolygonNode incoming) + { + if (NumConnected == 0) + { + throw new Exception("the connection graph is inconsistent"); + } + if (NumConnected == 1) + { + //b2Assert(false); + // Because of the possibility of collapsing nearby points, + // we may end up with "spider legs" dangling off of a region. + // The correct behavior here is to turn around. + return incoming; + } + Point2D inDir = mPosition - incoming.mPosition; + + double inLength = inDir.Magnitude(); + inDir.Normalize(); + + if (inLength <= MathUtil.EPSILON) + { + throw new Exception("Length too small"); + } + + SplitComplexPolygonNode result = null; + for (int i = 0; i < NumConnected; ++i) + { + if (mConnected[i] == incoming) + { + continue; + } + Point2D testDir = mConnected[i].mPosition - mPosition; + double testLengthSqr = testDir.MagnitudeSquared(); + testDir.Normalize(); + /* + if (testLengthSqr < COLLAPSE_DIST_SQR) { + printf("Problem with connection %d\n",i); + printf("This node has %d connections\n",nConnected); + printf("That one has %d\n",connected[i].nConnected); + if (this == connected[i]) printf("This points at itself.\n"); + }*/ + if (testLengthSqr <= (MathUtil.EPSILON * MathUtil.EPSILON)) + { + throw new Exception("Length too small"); + } + + double myCos = Point2D.Dot(inDir, testDir); + double mySin = Point2D.Cross(inDir, testDir); + if (result != null) + { + Point2D resultDir = result.mPosition - mPosition; + resultDir.Normalize(); + double resCos = Point2D.Dot(inDir, resultDir); + double resSin = Point2D.Cross(inDir, resultDir); + if (IsRighter(mySin, myCos, resSin, resCos)) + { + result = mConnected[i]; + } + } + else + { + result = mConnected[i]; + } + } + + //if (B2_POLYGON_REPORT_ERRORS && result != null) + //{ + // printf("nConnected = %d\n", nConnected); + // for (int i = 0; i < nConnected; ++i) + // { + // printf("connected[%d] @ %d\n", i, (int)connected[i]); + // } + //} + //Debug.Assert(result != null); + + return result; + } + + public SplitComplexPolygonNode GetRightestConnection(Point2D incomingDir) + { + Point2D diff = mPosition - incomingDir; + SplitComplexPolygonNode temp = new SplitComplexPolygonNode(diff); + SplitComplexPolygonNode res = GetRightestConnection(temp); + //Debug.Assert(res != null); + return res; + } + } + + + public class PolygonOperationContext + { + public PolygonUtil.PolyOperation mOperations; + public Point2DList mOriginalPolygon1; + public Point2DList mOriginalPolygon2; + public Point2DList mPoly1; + public Point2DList mPoly2; + public List mIntersections; + public int mStartingIndex; + public PolygonUtil.PolyUnionError mError; + public List mPoly1VectorAngles; + public List mPoly2VectorAngles; + public Dictionary mOutput = new Dictionary(); + + public Point2DList Union + { + get + { + Point2DList l = null; + if (!mOutput.TryGetValue((uint)PolygonUtil.PolyOperation.Union, out l)) + { + l = new Point2DList(); + mOutput.Add((uint)PolygonUtil.PolyOperation.Union, l); + } + + return l; + } + } + public Point2DList Intersect + { + get + { + Point2DList l = null; + if (!mOutput.TryGetValue((uint)PolygonUtil.PolyOperation.Intersect, out l)) + { + l = new Point2DList(); + mOutput.Add((uint)PolygonUtil.PolyOperation.Intersect, l); + } + + return l; + } + } + public Point2DList Subtract + { + get + { + Point2DList l = null; + if (!mOutput.TryGetValue((uint)PolygonUtil.PolyOperation.Subtract, out l)) + { + l = new Point2DList(); + mOutput.Add((uint)PolygonUtil.PolyOperation.Subtract, l); + } + + return l; + } + } + + public PolygonOperationContext() { } + + + public void Clear() + { + mOperations = PolygonUtil.PolyOperation.None; + mOriginalPolygon1 = null; + mOriginalPolygon2 = null; + mPoly1 = null; + mPoly2 = null; + mIntersections = null; + mStartingIndex = -1; + mError = PolygonUtil.PolyUnionError.None; + mPoly1VectorAngles = null; + mPoly2VectorAngles = null; + mOutput = new Dictionary(); + } + + + public bool Init(PolygonUtil.PolyOperation operations, Point2DList polygon1, Point2DList polygon2) + { + Clear(); + + mOperations = operations; + mOriginalPolygon1 = polygon1; + mOriginalPolygon2 = polygon2; + + // Make a copy of the polygons so that we dont modify the originals, and + // force vertices to integer (pixel) values. + mPoly1 = new Point2DList(polygon1); + mPoly1.WindingOrder = Point2DList.WindingOrderType.Default; + mPoly2 = new Point2DList(polygon2); + mPoly2.WindingOrder = Point2DList.WindingOrderType.Default; + + // Find intersection points + if (!VerticesIntersect(mPoly1, mPoly2, out mIntersections)) + { + // No intersections found - polygons do not overlap. + mError = PolygonUtil.PolyUnionError.NoIntersections; + return false; + } + + // make sure edges that intersect more than once are updated to have correct start points + int numIntersections = mIntersections.Count; + for (int i = 0; i < numIntersections; ++i) + { + for (int j = i + 1; j < numIntersections; ++j) + { + if (mIntersections[i].EdgeOne.EdgeStart.Equals(mIntersections[j].EdgeOne.EdgeStart) && + mIntersections[i].EdgeOne.EdgeEnd.Equals(mIntersections[j].EdgeOne.EdgeEnd)) + { + mIntersections[j].EdgeOne.EdgeStart = mIntersections[i].IntersectionPoint; + } + if (mIntersections[i].EdgeTwo.EdgeStart.Equals(mIntersections[j].EdgeTwo.EdgeStart) && + mIntersections[i].EdgeTwo.EdgeEnd.Equals(mIntersections[j].EdgeTwo.EdgeEnd)) + { + mIntersections[j].EdgeTwo.EdgeStart = mIntersections[i].IntersectionPoint; + } + } + } + + // Add intersection points to original polygons, ignoring existing points. + foreach (EdgeIntersectInfo intersect in mIntersections) + { + if (!mPoly1.Contains(intersect.IntersectionPoint)) + { + mPoly1.Insert(mPoly1.IndexOf(intersect.EdgeOne.EdgeStart) + 1, intersect.IntersectionPoint); + } + + if (!mPoly2.Contains(intersect.IntersectionPoint)) + { + mPoly2.Insert(mPoly2.IndexOf(intersect.EdgeTwo.EdgeStart) + 1, intersect.IntersectionPoint); + } + } + + mPoly1VectorAngles = new List(); + for (int i = 0; i < mPoly2.Count; ++i) + { + mPoly1VectorAngles.Add(-1); + } + mPoly2VectorAngles = new List(); + for (int i = 0; i < mPoly1.Count; ++i) + { + mPoly2VectorAngles.Add(-1); + } + + // Find starting point on the edge of polygon1 that is outside of + // the intersected area to begin polygon trace. + int currentIndex = 0; + do + { + bool bPointInPolygonAngle = PointInPolygonAngle(mPoly1[currentIndex], mPoly2); + mPoly2VectorAngles[currentIndex] = bPointInPolygonAngle ? 1 : 0; + if (bPointInPolygonAngle) + { + mStartingIndex = currentIndex; + break; + } + currentIndex = mPoly1.NextIndex(currentIndex); + } while (currentIndex != 0); + + // If we don't find a point on polygon1 thats outside of the + // intersect area, the polygon1 must be inside of polygon2, + // in which case, polygon2 IS the union of the two. + if (mStartingIndex == -1) + { + mError = PolygonUtil.PolyUnionError.Poly1InsidePoly2; + return false; + } + + return true; + } + + + /// + /// Check and return polygon intersections + /// + /// + /// + /// + /// + private bool VerticesIntersect(Point2DList polygon1, Point2DList polygon2, out List intersections) + { + intersections = new List(); + double epsilon = Math.Min(polygon1.Epsilon, polygon2.Epsilon); + + // Iterate through polygon1's edges + for (int i = 0; i < polygon1.Count; i++) + { + // Get edge vertices + Point2D p1 = polygon1[i]; + Point2D p2 = polygon1[polygon1.NextIndex(i)]; + + // Get intersections between this edge and polygon2 + for (int j = 0; j < polygon2.Count; j++) + { + Point2D point = new Point2D(); + + Point2D p3 = polygon2[j]; + Point2D p4 = polygon2[polygon2.NextIndex(j)]; + + // Check if the edges intersect + if (TriangulationUtil.LinesIntersect2D(p1, p2, p3, p4, ref point, epsilon)) + { + // Rounding is not needed since we compare using an epsilon. + //// Here, we round the returned intersection point to its nearest whole number. + //// This prevents floating point anomolies where 99.9999-> is returned instead of 100. + //point = new Point2D((float)Math.Round(point.X, 0), (float)Math.Round(point.Y, 0)); + // Record the intersection + intersections.Add(new EdgeIntersectInfo(new Edge(p1, p2), new Edge(p3, p4), point)); + } + } + } + + // true if any intersections were found. + return (intersections.Count > 0); + } + + + /// + /// * ref: http://ozviz.wasp.uwa.edu.au/~pbourke/geometry/insidepoly/ - Solution 2 + /// * Compute the sum of the angles made between the test point and each pair of points making up the polygon. + /// * If this sum is 2pi then the point is an interior point, if 0 then the point is an exterior point. + /// + public bool PointInPolygonAngle(Point2D point, Point2DList polygon) + { + double angle = 0; + + // Iterate through polygon's edges + for (int i = 0; i < polygon.Count; i++) + { + // Get points + Point2D p1 = polygon[i] - point; + Point2D p2 = polygon[polygon.NextIndex(i)] - point; + + angle += VectorAngle(p1, p2); + } + + if (Math.Abs(angle) < Math.PI) + { + return false; + } + + return true; + } + + + /// + /// Return the angle between two vectors on a plane + /// The angle is from vector 1 to vector 2, positive anticlockwise + /// The result is between -pi -> pi + /// + public double VectorAngle(Point2D p1, Point2D p2) + { + double theta1 = Math.Atan2(p1.Y, p1.X); + double theta2 = Math.Atan2(p2.Y, p2.X); + double dtheta = theta2 - theta1; + while (dtheta > Math.PI) + { + dtheta -= (2.0 * Math.PI); + } + while (dtheta < -Math.PI) + { + dtheta += (2.0 * Math.PI); + } + + return (dtheta); + } + + } + +} diff --git a/Assets/Plugins/Poly2Tri/Triangulation/Polygon/PolygonUtil.cs.meta b/Assets/Plugins/Poly2Tri/Triangulation/Polygon/PolygonUtil.cs.meta new file mode 100644 index 0000000..1e6549b --- /dev/null +++ b/Assets/Plugins/Poly2Tri/Triangulation/Polygon/PolygonUtil.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3c2b8bdeed61807438a69bc54de1a423 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Poly2Tri/Triangulation/Sets.meta b/Assets/Plugins/Poly2Tri/Triangulation/Sets.meta new file mode 100644 index 0000000..bbf9ab7 --- /dev/null +++ b/Assets/Plugins/Poly2Tri/Triangulation/Sets.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0fe19f49cb73334418d2abe53ddbe747 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Poly2Tri/Triangulation/Sets/ConstrainedPointSet.cs b/Assets/Plugins/Poly2Tri/Triangulation/Sets/ConstrainedPointSet.cs new file mode 100644 index 0000000..d680849 --- /dev/null +++ b/Assets/Plugins/Poly2Tri/Triangulation/Sets/ConstrainedPointSet.cs @@ -0,0 +1,444 @@ +/* Poly2Tri + * Copyright (c) 2009-2010, Poly2Tri Contributors + * http://code.google.com/p/poly2tri/ + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of Poly2Tri nor the names of its contributors may be + * used to endorse or promote products derived from this software without specific + * prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +using System; +using System.Collections.Generic; +using System.Text; + + +namespace Poly2Tri +{ + /* + * Extends the PointSet by adding some Constraints on how it will be triangulated
+ * A constraint defines an edge between two points in the set, these edges can not + * be crossed. They will be enforced triangle edges after a triangulation. + *

+ * + * + * @author Thomas Åhlén, thahlen@gmail.com + * @author Lee Wilson, lwilson@ea.com + */ + public class ConstrainedPointSet : PointSet + { + protected Dictionary mConstraintMap = new Dictionary(); + protected List mHoles = new List(); + + public override TriangulationMode TriangulationMode { get { return TriangulationMode.Constrained; } } + + + public ConstrainedPointSet(List bounds) + : base(bounds) + { + AddBoundaryConstraints(); + } + + public ConstrainedPointSet(List bounds, List constraints) + : base(bounds) + { + AddBoundaryConstraints(); + AddConstraints(constraints); + } + + public ConstrainedPointSet(List bounds, int[] indices) + : base(bounds) + { + AddBoundaryConstraints(); + List l = new List(); + for (int i = 0; i < indices.Length; i += 2) + { + TriangulationConstraint tc = new TriangulationConstraint(bounds[i], bounds[i + 1]); + l.Add(tc); + } + AddConstraints(l); + } + + + protected void AddBoundaryConstraints() + { + TriangulationPoint ptLL = null; + TriangulationPoint ptLR = null; + TriangulationPoint ptUR = null; + TriangulationPoint ptUL = null; + if (!TryGetPoint(MinX, MinY, out ptLL)) + { + ptLL = new TriangulationPoint(MinX, MinY); + Add(ptLL); + } + if (!TryGetPoint(MaxX, MinY, out ptLR)) + { + ptLR = new TriangulationPoint(MaxX, MinY); + Add(ptLR); + } + if (!TryGetPoint(MaxX, MaxY, out ptUR)) + { + ptUR = new TriangulationPoint(MaxX, MaxY); + Add(ptUR); + } + if (!TryGetPoint(MinX, MaxY, out ptUL)) + { + ptUL = new TriangulationPoint(MinX, MaxY); + Add(ptUL); + } + TriangulationConstraint tcLLtoLR = new TriangulationConstraint(ptLL, ptLR); + AddConstraint(tcLLtoLR); + TriangulationConstraint tcLRtoUR = new TriangulationConstraint(ptLR, ptUR); + AddConstraint(tcLRtoUR); + TriangulationConstraint tcURtoUL = new TriangulationConstraint(ptUR, ptUL); + AddConstraint(tcURtoUL); + TriangulationConstraint tcULtoLL = new TriangulationConstraint(ptUL, ptLL); + AddConstraint(tcULtoLL); + } + + + public override void Add(Point2D p) + { + Add(p as TriangulationPoint, -1, true); + } + + + public override void Add(TriangulationPoint p) + { + Add(p, -1, true); + } + + + public override bool AddRange(List points) + { + bool bOK = true; + foreach (TriangulationPoint p in points) + { + bOK = Add(p, -1, true) && bOK; + } + + return bOK; + } + + + // Assumes that points being passed in the list are connected and form a polygon. + // Note that some error checking is done for robustness, but for the most part, + // we have to rely on the user to feed us "correct" data + public bool AddHole(List points, string name) + { + if (points == null) + { + return false; + } + + //// split our self-intersection sections into their own lists + List pts = new List(); + int listIdx = 0; + { + Contour c = new Contour(this, points, WindingOrderType.Unknown); + pts.Add(c); + + // only constrain the points if we actually HAVE a bounding rect + if (mPoints.Count > 1) + { + // constrain the points to bounding rect + int numPoints = pts[listIdx].Count; + for (int i = 0; i < numPoints; ++i) + { + ConstrainPointToBounds(pts[listIdx][i]); + } + } + } + + while (listIdx < pts.Count) + { + // simple sanity checking - remove duplicate coincident points before + // we check the polygon: fast, simple algorithm that eliminate lots of problems + // that only more expensive checks will find + pts[listIdx].RemoveDuplicateNeighborPoints(); + pts[listIdx].WindingOrder = Point2DList.WindingOrderType.Default; + + bool bListOK = true; + Point2DList.PolygonError err = pts[listIdx].CheckPolygon(); + while (bListOK && err != PolygonError.None) + { + if ((err & PolygonError.NotEnoughVertices) == PolygonError.NotEnoughVertices) + { + bListOK = false; + continue; + } + if ((err & PolygonError.NotSimple) == PolygonError.NotSimple) + { + // split the polygons, remove the current list and add the resulting list to the end + //List l = TriangulationUtil.SplitSelfIntersectingPolygon(pts[listIdx], pts[listIdx].Epsilon); + List l = PolygonUtil.SplitComplexPolygon(pts[listIdx], pts[listIdx].Epsilon); + pts.RemoveAt(listIdx); + foreach (Point2DList newList in l) + { + Contour c = new Contour(this); + c.AddRange(newList); + pts.Add(c); + } + err = pts[listIdx].CheckPolygon(); + continue; + } + if ((err & PolygonError.Degenerate) == PolygonError.Degenerate) + { + pts[listIdx].Simplify(this.Epsilon); + err = pts[listIdx].CheckPolygon(); + continue; + //err &= ~(PolygonError.Degenerate); + //if (pts[listIdx].Count < 3) + //{ + // err |= PolygonError.NotEnoughVertices; + // bListOK = false; + // continue; + //} + } + if ((err & PolygonError.AreaTooSmall) == PolygonError.AreaTooSmall || + (err & PolygonError.SidesTooCloseToParallel) == PolygonError.SidesTooCloseToParallel || + (err & PolygonError.TooThin) == PolygonError.TooThin || + (err & PolygonError.Unknown) == PolygonError.Unknown) + { + bListOK = false; + continue; + } + // non-convex polygons are ok + //if ((err & PolygonError.NotConvex) == PolygonError.NotConvex) + //{ + //} + } + if (!bListOK && pts[listIdx].Count != 2) + { + pts.RemoveAt(listIdx); + } + else + { + ++listIdx; + } + } + + bool bOK = true; + listIdx = 0; + while (listIdx < pts.Count) + { + int numPoints = pts[listIdx].Count; + if (numPoints < 2) + { + // should not be possible by this point... + ++listIdx; + bOK = false; + continue; + } + else if (numPoints == 2) + { + uint constraintCode = TriangulationConstraint.CalculateContraintCode(pts[listIdx][0], pts[listIdx][1]); + TriangulationConstraint tc = null; + if (!mConstraintMap.TryGetValue(constraintCode, out tc)) + { + tc = new TriangulationConstraint(pts[listIdx][0], pts[listIdx][1]); + AddConstraint(tc); + } + } + else + { + Contour ph = new Contour(this, pts[listIdx], Point2DList.WindingOrderType.Unknown); + ph.WindingOrder = Point2DList.WindingOrderType.Default; + ph.Name = name + ":" + listIdx.ToString(); + mHoles.Add(ph); + } + ++listIdx; + } + + return bOK; + } + + + // this method adds constraints singly and does not assume that they form a contour + // If you are trying to add a "series" or edges (or "contour"), use AddHole instead. + public bool AddConstraints(List constraints) + { + if (constraints == null || constraints.Count < 1) + { + return false; + } + + bool bOK = true; + foreach (TriangulationConstraint tc in constraints) + { + if (ConstrainPointToBounds(tc.P) || ConstrainPointToBounds(tc.Q)) + { + tc.CalculateContraintCode(); + } + + TriangulationConstraint tcTmp = null; + if (!mConstraintMap.TryGetValue(tc.ConstraintCode, out tcTmp)) + { + tcTmp = tc; + bOK = AddConstraint(tcTmp) && bOK; + } + } + + return bOK; + } + + + public bool AddConstraint(TriangulationConstraint tc) + { + if (tc == null || tc.P == null || tc.Q == null) + { + return false; + } + + // If we already have this constraint, then there's nothing to do. Since we already have + // a valid constraint in the map with the same ConstraintCode, then we're guaranteed that + // the points are also valid (and have the same coordinates as the ones being passed in with + // this constrain). Return true to indicate that we successfully "added" the constraint + if (mConstraintMap.ContainsKey(tc.ConstraintCode)) + { + return true; + } + + // Make sure the constraint is not using points that are duplicates of ones already stored + // If it is, replace the Constraint Points with the points already stored. + TriangulationPoint p; + if (TryGetPoint(tc.P.X, tc.P.Y, out p)) + { + tc.P = p; + } + else + { + Add(tc.P); + } + + if (TryGetPoint(tc.Q.X, tc.Q.Y, out p)) + { + tc.Q = p; + } + else + { + Add(tc.Q); + } + + mConstraintMap.Add(tc.ConstraintCode, tc); + + return true; + } + + + public bool TryGetConstraint(uint constraintCode, out TriangulationConstraint tc) + { + return mConstraintMap.TryGetValue(constraintCode, out tc); + } + + + public int GetNumConstraints() + { + return mConstraintMap.Count; + } + + + public Dictionary.Enumerator GetConstraintEnumerator() + { + return mConstraintMap.GetEnumerator(); + } + + + public int GetNumHoles() + { + int numHoles = 0; + foreach (Contour c in mHoles) + { + numHoles += c.GetNumHoles(false); + } + + return numHoles; + } + + + public Contour GetHole(int idx) + { + if (idx < 0 || idx >= mHoles.Count) + { + return null; + } + + return mHoles[idx]; + } + + + public int GetActualHoles(out List holes) + { + holes = new List(); + foreach (Contour c in mHoles) + { + c.GetActualHoles(false, ref holes); + } + + return holes.Count; + } + + + protected void InitializeHoles() + { + Contour.InitializeHoles(mHoles, this, this); + foreach (Contour c in mHoles) + { + c.InitializeHoles(this); + } + } + + + public override bool Initialize() + { + InitializeHoles(); + return base.Initialize(); + } + + + public override void Prepare(TriangulationContext tcx) + { + if (!Initialize()) + { + return; + } + + base.Prepare(tcx); + + Dictionary.Enumerator it = mConstraintMap.GetEnumerator(); + while (it.MoveNext()) + { + TriangulationConstraint tc = it.Current.Value; + tcx.NewConstraint(tc.P, tc.Q); + } + } + + + public override void AddTriangle(DelaunayTriangle t) + { + Triangles.Add(t); + } + + } +} diff --git a/Assets/Plugins/Poly2Tri/Triangulation/Sets/ConstrainedPointSet.cs.meta b/Assets/Plugins/Poly2Tri/Triangulation/Sets/ConstrainedPointSet.cs.meta new file mode 100644 index 0000000..fdb939d --- /dev/null +++ b/Assets/Plugins/Poly2Tri/Triangulation/Sets/ConstrainedPointSet.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 916d5f1fd714de84cbff36c5f382d155 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Poly2Tri/Triangulation/Sets/PointSet.cs b/Assets/Plugins/Poly2Tri/Triangulation/Sets/PointSet.cs new file mode 100644 index 0000000..b2867e6 --- /dev/null +++ b/Assets/Plugins/Poly2Tri/Triangulation/Sets/PointSet.cs @@ -0,0 +1,303 @@ +/* Poly2Tri + * Copyright (c) 2009-2010, Poly2Tri Contributors + * http://code.google.com/p/poly2tri/ + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of Poly2Tri nor the names of its contributors may be + * used to endorse or promote products derived from this software without specific + * prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +using System; +using System.Collections.Generic; +using System.Text; + + +namespace Poly2Tri +{ + public class PointSet : Point2DList, ITriangulatable, IEnumerable, IList + { + protected Dictionary mPointMap = new Dictionary(); + public IList Points { get { return this; } private set { } } + public IList Triangles { get; private set; } + + public string FileName { get; set; } + public bool DisplayFlipX { get; set; } + public bool DisplayFlipY { get; set; } + public float DisplayRotate { get; set; } + + protected double mPrecision = TriangulationPoint.kVertexCodeDefaultPrecision; + public double Precision { get { return mPrecision; } set { mPrecision = value; } } + + public double MinX { get { return mBoundingBox.MinX; } } + public double MaxX { get { return mBoundingBox.MaxX; } } + public double MinY { get { return mBoundingBox.MinY; } } + public double MaxY { get { return mBoundingBox.MaxY; } } + public Rect2D Bounds { get { return mBoundingBox; } } + + public virtual TriangulationMode TriangulationMode { get { return TriangulationMode.Unconstrained; } } + + public new TriangulationPoint this[int index] + { + get { return mPoints[index] as TriangulationPoint; } + set { mPoints[index] = value; } + } + + + public PointSet(List bounds) + { + //Points = new List(); + foreach (TriangulationPoint p in bounds) + { + Add(p, -1, false); + + // Only the initial points are counted toward min/max x/y as they + // are considered to be the boundaries of the point-set + mBoundingBox.AddPoint(p); + } + mEpsilon = CalculateEpsilon(); + mWindingOrder = WindingOrderType.Unknown; // not valid for a point-set + } + + + IEnumerator IEnumerable.GetEnumerator() + { + return new TriangulationPointEnumerator(mPoints); + } + + + public int IndexOf(TriangulationPoint p) + { + return mPoints.IndexOf(p); + } + + + public override void Add(Point2D p) + { + Add(p as TriangulationPoint, -1, false); + } + + public virtual void Add(TriangulationPoint p) + { + Add(p, -1, false); + } + + + protected override void Add(Point2D p, int idx, bool constrainToBounds) + { + Add(p as TriangulationPoint, idx, constrainToBounds); + } + + + protected bool Add(TriangulationPoint p, int idx, bool constrainToBounds) + { + if (p == null) + { + return false; + } + + if (constrainToBounds) + { + ConstrainPointToBounds(p); + } + + // if we already have an instance of the point, then don't bother inserting it again as duplicate points + // will actually cause some real problems later on. Still return true though to indicate that the point + // is successfully "added" + if (mPointMap.ContainsKey(p.VertexCode)) + { + return true; + } + mPointMap.Add(p.VertexCode, p); + + if (idx < 0) + { + mPoints.Add(p); + } + else + { + mPoints.Insert(idx, p); + } + + return true; + } + + + public override void AddRange(IEnumerator iter, WindingOrderType windingOrder) + { + if (iter == null) + { + return; + } + + iter.Reset(); + while (iter.MoveNext()) + { + Add(iter.Current); + } + } + + + public virtual bool AddRange(List points) + { + bool bOK = true; + foreach (TriangulationPoint p in points) + { + bOK = Add(p, -1, false) && bOK; + } + + return bOK; + } + + + public bool TryGetPoint(double x, double y, out TriangulationPoint p) + { + uint vc = TriangulationPoint.CreateVertexCode(x, y, Precision); + if (mPointMap.TryGetValue(vc, out p)) + { + return true; + } + + return false; + } + + + //public override void Insert(int idx, Point2D item) + //{ + // Add(item, idx, true); + //} + + + public void Insert(int idx, TriangulationPoint item) + { + mPoints.Insert(idx, item); + } + + + public override bool Remove(Point2D p) + { + return mPoints.Remove(p); + } + + + public bool Remove(TriangulationPoint p) + { + return mPoints.Remove(p); + } + + + public override void RemoveAt(int idx) + { + if (idx < 0 || idx >= Count) + { + return; + } + mPoints.RemoveAt(idx); + } + + + public bool Contains(TriangulationPoint p) + { + return mPoints.Contains(p); + } + + + public void CopyTo(TriangulationPoint[] array, int arrayIndex) + { + int numElementsToCopy = Math.Min(Count, array.Length - arrayIndex); + for (int i = 0; i < numElementsToCopy; ++i) + { + array[arrayIndex + i] = mPoints[i] as TriangulationPoint; + } + } + + + // returns true if the point is changed, false if the point is unchanged + protected bool ConstrainPointToBounds(Point2D p) + { + double oldX = p.X; + double oldY = p.Y; + p.X = Math.Max(MinX, p.X); + p.X = Math.Min(MaxX, p.X); + p.Y = Math.Max(MinY, p.Y); + p.Y = Math.Min(MaxY, p.Y); + + return (p.X != oldX) || (p.Y != oldY); + } + + + protected bool ConstrainPointToBounds(TriangulationPoint p) + { + double oldX = p.X; + double oldY = p.Y; + p.X = Math.Max(MinX, p.X); + p.X = Math.Min(MaxX, p.X); + p.Y = Math.Max(MinY, p.Y); + p.Y = Math.Min(MaxY, p.Y); + + return (p.X != oldX) || (p.Y != oldY); + } + + + public virtual void AddTriangle(DelaunayTriangle t) + { + Triangles.Add(t); + } + + + public void AddTriangles(IEnumerable list) + { + foreach (var tri in list) + { + AddTriangle(tri); + } + } + + + public void ClearTriangles() + { + Triangles.Clear(); + } + + + public virtual bool Initialize() + { + return true; + } + + + public virtual void Prepare(TriangulationContext tcx) + { + if (Triangles == null) + { + Triangles = new List(Points.Count); + } + else + { + Triangles.Clear(); + } + tcx.Points.AddRange(Points); + } + } +} diff --git a/Assets/Plugins/Poly2Tri/Triangulation/Sets/PointSet.cs.meta b/Assets/Plugins/Poly2Tri/Triangulation/Sets/PointSet.cs.meta new file mode 100644 index 0000000..0177b81 --- /dev/null +++ b/Assets/Plugins/Poly2Tri/Triangulation/Sets/PointSet.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 268d5ee20b0e0264ba2e0fb6a609f767 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Poly2Tri/Triangulation/TriangulationAlgorithm.cs b/Assets/Plugins/Poly2Tri/Triangulation/TriangulationAlgorithm.cs new file mode 100644 index 0000000..e940cb7 --- /dev/null +++ b/Assets/Plugins/Poly2Tri/Triangulation/TriangulationAlgorithm.cs @@ -0,0 +1,38 @@ +/* Poly2Tri + * Copyright (c) 2009-2010, Poly2Tri Contributors + * http://code.google.com/p/poly2tri/ + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of Poly2Tri nor the names of its contributors may be + * used to endorse or promote products derived from this software without specific + * prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +namespace Poly2Tri +{ + public enum TriangulationAlgorithm + { + DTSweep + } +} \ No newline at end of file diff --git a/Assets/Plugins/Poly2Tri/Triangulation/TriangulationAlgorithm.cs.meta b/Assets/Plugins/Poly2Tri/Triangulation/TriangulationAlgorithm.cs.meta new file mode 100644 index 0000000..a09048c --- /dev/null +++ b/Assets/Plugins/Poly2Tri/Triangulation/TriangulationAlgorithm.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: abc66d7b94e2899478944d8ff73c7130 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Poly2Tri/Triangulation/TriangulationConstraint.cs b/Assets/Plugins/Poly2Tri/Triangulation/TriangulationConstraint.cs new file mode 100644 index 0000000..1a8f416 --- /dev/null +++ b/Assets/Plugins/Poly2Tri/Triangulation/TriangulationConstraint.cs @@ -0,0 +1,153 @@ +/* Poly2Tri + * Copyright (c) 2009-2010, Poly2Tri Contributors + * http://code.google.com/p/poly2tri/ + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of Poly2Tri nor the names of its contributors may be + * used to endorse or promote products derived from this software without specific + * prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +/** + * Forces a triangle edge between two points p and q + * when triangulating. For example used to enforce + * Polygon Edges during a polygon triangulation. + * + * @author Thomas Åhlén, thahlen@gmail.com + */ + +using System; + + +namespace Poly2Tri +{ + public class Edge + { + protected Point2D mP = null; + protected Point2D mQ = null; + + public Point2D EdgeStart { get { return mP; } set { mP= value;} } + public Point2D EdgeEnd { get { return mQ; } set { mQ = value; } } + + public Edge() { mP = null; mQ = null; } + public Edge(Point2D edgeStart, Point2D edgeEnd) + { + mP = edgeStart; + mQ = edgeEnd; + } + } + + + public class TriangulationConstraint : Edge + { + private uint mContraintCode = 0; + + public TriangulationPoint P + { + get { return mP as TriangulationPoint; } + set + { + // Note: intentionally use != instead of !Equals() because we + // WANT to compare pointer values here rather than VertexCode values + if (value != null && mP != value) + { + mP = value; + CalculateContraintCode(); + } + } + } + public TriangulationPoint Q + { + get { return mQ as TriangulationPoint; } + set + { + // Note: intentionally use != instead of !Equals() because we + // WANT to compare pointer values here rather than VertexCode values + if (value != null && mQ != value) + { + mQ = value; + CalculateContraintCode(); + } + } + } + public uint ConstraintCode { get { return mContraintCode; } } + + + ///

+ /// Give two points in any order. Will always be ordered so + /// that q.y > p.y and q.x > p.x if same y value + /// + public TriangulationConstraint(TriangulationPoint p1, TriangulationPoint p2) + { + mP = p1; + mQ = p2; + if (p1.Y > p2.Y) + { + mQ = p1; + mP = p2; + } + else if (p1.Y == p2.Y) + { + if (p1.X > p2.X) + { + mQ = p1; + mP = p2; + } + else if (p1.X == p2.X) + { + // logger.info( "Failed to create constraint {}={}", p1, p2 ); + // throw new DuplicatePointException( p1 + "=" + p2 ); + // return; + } + } + CalculateContraintCode(); + } + + + public override string ToString() + { + return "[P=" + P.ToString() + ", Q=" + Q.ToString() + " : {" + mContraintCode.ToString() + "}]"; + } + + + public void CalculateContraintCode() + { + mContraintCode = TriangulationConstraint.CalculateContraintCode(P, Q); + } + + + public static uint CalculateContraintCode(TriangulationPoint p, TriangulationPoint q) + { + if (p == null || p == null) + { + throw new ArgumentNullException(); + } + + uint constraintCode = MathUtil.Jenkins32Hash(BitConverter.GetBytes(p.VertexCode), 0); + constraintCode = MathUtil.Jenkins32Hash(BitConverter.GetBytes(q.VertexCode), constraintCode); + + return constraintCode; + } + + } +} diff --git a/Assets/Plugins/Poly2Tri/Triangulation/TriangulationConstraint.cs.meta b/Assets/Plugins/Poly2Tri/Triangulation/TriangulationConstraint.cs.meta new file mode 100644 index 0000000..6cb6740 --- /dev/null +++ b/Assets/Plugins/Poly2Tri/Triangulation/TriangulationConstraint.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 83093633ca35eae438bb30032fb94cc7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Poly2Tri/Triangulation/TriangulationContext.cs b/Assets/Plugins/Poly2Tri/Triangulation/TriangulationContext.cs new file mode 100644 index 0000000..61ac0d3 --- /dev/null +++ b/Assets/Plugins/Poly2Tri/Triangulation/TriangulationContext.cs @@ -0,0 +1,149 @@ +/* Poly2Tri + * Copyright (c) 2009-2010, Poly2Tri Contributors + * http://code.google.com/p/poly2tri/ + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of Poly2Tri nor the names of its contributors may be + * used to endorse or promote products derived from this software without specific + * prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +using System; +using System.Collections.Generic; +using System.Text; + + +namespace Poly2Tri +{ + public abstract class TriangulationContext + { + public TriangulationDebugContext DebugContext { get; protected set; } + + public readonly List Triangles = new List(); + public readonly List Points = new List(200); + public TriangulationMode TriangulationMode { get; protected set; } + public ITriangulatable Triangulatable { get; private set; } + + public int StepCount { get; private set; } + + public void Done() + { + StepCount++; + } + + public abstract TriangulationAlgorithm Algorithm { get; } + + + public virtual void PrepareTriangulation(ITriangulatable t) + { + Triangulatable = t; + TriangulationMode = t.TriangulationMode; + t.Prepare(this); + + //List constraints = new List(); + + //Console.WriteLine("Points for " + t.FileName + ":"); + //Console.WriteLine("Idx,X,Y,VC,Edges"); + //int numPoints = Points.Count; + //for (int i = 0; i < numPoints; ++i) + //{ + // StringBuilder sb = new StringBuilder(128); + // sb.Append(i.ToString()); + // sb.Append(","); + // sb.Append(Points[i].X.ToString()); + // sb.Append(","); + // sb.Append(Points[i].Y.ToString()); + // sb.Append(","); + // sb.Append(Points[i].VertexCode.ToString()); + // int numEdges = (Points[i].Edges != null) ? Points[i].Edges.Count : 0; + // for (int j = 0; j < numEdges; ++j) + // { + // TriangulationConstraint tc = Points[i].Edges[j]; + // sb.Append(","); + // sb.Append(tc.ConstraintCode.ToString()); + // constraints.Add(tc); + // } + // Console.WriteLine(sb.ToString()); + //} + + //int idx = 0; + //Console.WriteLine("Constraints " + t.FileName + ":"); + //Console.WriteLine("EdgeIdx,Px,Py,PVC,Qx,Qy,QVC,ConstraintCode,Owner"); + //foreach (TriangulationConstraint tc in constraints) + //{ + // StringBuilder sb = new StringBuilder(128); + + // sb.Append(idx.ToString()); + // sb.Append(","); + // sb.Append(tc.P.X.ToString()); + // sb.Append(","); + // sb.Append(tc.P.Y.ToString()); + // sb.Append(","); + // sb.Append(tc.P.VertexCode.ToString()); + // sb.Append(","); + // sb.Append(tc.Q.X.ToString()); + // sb.Append(","); + // sb.Append(tc.Q.Y.ToString()); + // sb.Append(","); + // sb.Append(tc.Q.VertexCode.ToString()); + // sb.Append(","); + // sb.Append(tc.ConstraintCode.ToString()); + // sb.Append(","); + // if (tc.Q.HasEdge(tc.P)) + // { + // sb.Append("Q"); + // } + // else + // { + // sb.Append("P"); + // } + // Console.WriteLine(sb.ToString()); + + // ++idx; + //} + } + + + public abstract TriangulationConstraint NewConstraint(TriangulationPoint a, TriangulationPoint b); + + + public void Update(string message) { } + + + public virtual void Clear() + { + Points.Clear(); + if (DebugContext != null) + { + DebugContext.Clear(); + } + StepCount = 0; + } + + + public virtual bool IsDebugEnabled { get; protected set; } + + public DTSweepDebugContext DTDebugContext { get { return DebugContext as DTSweepDebugContext; } } + } +} diff --git a/Assets/Plugins/Poly2Tri/Triangulation/TriangulationContext.cs.meta b/Assets/Plugins/Poly2Tri/Triangulation/TriangulationContext.cs.meta new file mode 100644 index 0000000..c9e5880 --- /dev/null +++ b/Assets/Plugins/Poly2Tri/Triangulation/TriangulationContext.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a4a56fa5d3520ee40b011ac6f4741f62 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Poly2Tri/Triangulation/TriangulationDebugContext.cs b/Assets/Plugins/Poly2Tri/Triangulation/TriangulationDebugContext.cs new file mode 100644 index 0000000..db7b87b --- /dev/null +++ b/Assets/Plugins/Poly2Tri/Triangulation/TriangulationDebugContext.cs @@ -0,0 +1,45 @@ +/* Poly2Tri + * Copyright (c) 2009-2010, Poly2Tri Contributors + * http://code.google.com/p/poly2tri/ + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of Poly2Tri nor the names of its contributors may be + * used to endorse or promote products derived from this software without specific + * prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +namespace Poly2Tri +{ + public abstract class TriangulationDebugContext + { + protected TriangulationContext _tcx; + + public TriangulationDebugContext(TriangulationContext tcx) + { + _tcx = tcx; + } + + public abstract void Clear(); + } +} diff --git a/Assets/Plugins/Poly2Tri/Triangulation/TriangulationDebugContext.cs.meta b/Assets/Plugins/Poly2Tri/Triangulation/TriangulationDebugContext.cs.meta new file mode 100644 index 0000000..29662c2 --- /dev/null +++ b/Assets/Plugins/Poly2Tri/Triangulation/TriangulationDebugContext.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 90234b8ef08f44743bae557c23b08fb5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Poly2Tri/Triangulation/TriangulationMode.cs b/Assets/Plugins/Poly2Tri/Triangulation/TriangulationMode.cs new file mode 100644 index 0000000..d244a84 --- /dev/null +++ b/Assets/Plugins/Poly2Tri/Triangulation/TriangulationMode.cs @@ -0,0 +1,40 @@ +/* Poly2Tri + * Copyright (c) 2009-2010, Poly2Tri Contributors + * http://code.google.com/p/poly2tri/ + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of Poly2Tri nor the names of its contributors may be + * used to endorse or promote products derived from this software without specific + * prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +namespace Poly2Tri +{ + public enum TriangulationMode + { + Unconstrained, + Constrained, + Polygon + } +} diff --git a/Assets/Plugins/Poly2Tri/Triangulation/TriangulationMode.cs.meta b/Assets/Plugins/Poly2Tri/Triangulation/TriangulationMode.cs.meta new file mode 100644 index 0000000..d2860d2 --- /dev/null +++ b/Assets/Plugins/Poly2Tri/Triangulation/TriangulationMode.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 38eec52c05bc87545aa65be96865e8f7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Poly2Tri/Triangulation/TriangulationPoint.cs b/Assets/Plugins/Poly2Tri/Triangulation/TriangulationPoint.cs new file mode 100644 index 0000000..affc18a --- /dev/null +++ b/Assets/Plugins/Poly2Tri/Triangulation/TriangulationPoint.cs @@ -0,0 +1,244 @@ +/* Poly2Tri + * Copyright (c) 2009-2010, Poly2Tri Contributors + * http://code.google.com/p/poly2tri/ + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of Poly2Tri nor the names of its contributors may be + * used to endorse or promote products derived from this software without specific + * prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +using System; +using System.Collections; +using System.Collections.Generic; + + +namespace Poly2Tri +{ + + public class TriangulationPoint : Point2D + { + public static readonly double kVertexCodeDefaultPrecision = 8.0; + + public override double X + { + get { return mX; } + set + { + if (value != mX) + { + mX = value; + mVertexCode = TriangulationPoint.CreateVertexCode(mX, mY, kVertexCodeDefaultPrecision); + + // Technically, we should change the ConstraintCodes of any edges that contain this point. + // We don't for 2 reasons: + // 1) Currently the only time we care about Vertex/Constraint Codes is when entering data in the point-set. + // Once the data is being used by the algorithm, the point locations are (currently) not modified. + // 2) Since this Point's Edge list will only contain SOME of the edges that this point is a part of, + // there currently isn't a way to (easily) get any edges that contain this point but are not in this + // point's edge list. + } + } + } + public override double Y + { + get { return mY; } + set + { + if (value != mY) + { + mY = value; + mVertexCode = TriangulationPoint.CreateVertexCode(mX, mY, kVertexCodeDefaultPrecision); + + // Technically, we should change the ConstraintCodes of any edges that contain this point. + // We don't for 2 reasons: + // 1) Currently the only time we care about Vertex/Constraint Codes is when entering data in the point-set. + // Once the data is being used by the algorithm, the point locations are (currently) not modified. + // 2) Since this Point's Edge list will only contain SOME of the edges that this point is a part of, + // there currently isn't a way to (easily) get any edges that contain this point but are not in this + // point's edge list. + } + } + } + + protected uint mVertexCode = 0; + public uint VertexCode { get { return mVertexCode; } } + + // List of edges this point constitutes an upper ending point (CDT) + public List Edges { get; private set; } + public bool HasEdges { get { return Edges != null; } } + + + public TriangulationPoint(double x, double y) + : this(x, y, kVertexCodeDefaultPrecision) + { + } + + + public TriangulationPoint(double x, double y, double precision) + : base(x,y) + { + mVertexCode = TriangulationPoint.CreateVertexCode(x, y, precision); + } + + + public override string ToString() + { + return base.ToString() + ":{" + mVertexCode.ToString() + "}"; + } + + + public override int GetHashCode() + { + return (int)mVertexCode; + } + + + public override bool Equals(object obj) + { + TriangulationPoint p2 = obj as TriangulationPoint; + if (p2 != null) + { + return mVertexCode == p2.VertexCode; + } + else + { + return base.Equals(obj); + } + } + + + public override void Set(double x, double y) + { + if (x != mX || y != mY) + { + mX = x; + mY = y; + mVertexCode = TriangulationPoint.CreateVertexCode(mX, mY, kVertexCodeDefaultPrecision); + } + } + + + public static uint CreateVertexCode(double x, double y, double precision) + { + float fx = (float)MathUtil.RoundWithPrecision(x, precision); + float fy = (float)MathUtil.RoundWithPrecision(y, precision); + uint vc = MathUtil.Jenkins32Hash(BitConverter.GetBytes(fx), 0); + vc = MathUtil.Jenkins32Hash(BitConverter.GetBytes(fy), vc); + + return vc; + } + + + public void AddEdge(DTSweepConstraint e) + { + if (Edges == null) + { + Edges = new List(); + } + Edges.Add(e); + } + + + public bool HasEdge(TriangulationPoint p) + { + DTSweepConstraint tmp = null; + return GetEdge(p, out tmp); + } + + + public bool GetEdge(TriangulationPoint p, out DTSweepConstraint edge) + { + edge = null; + if (Edges == null || Edges.Count < 1 || p == null || p.Equals(this)) + { + return false; + } + + foreach (DTSweepConstraint sc in Edges) + { + if ((sc.P.Equals(this) && sc.Q.Equals(p)) || (sc.P.Equals(p) && sc.Q.Equals(this))) + { + edge = sc; + return true; + } + } + + return false; + } + + + public static Point2D ToPoint2D(TriangulationPoint p) + { + return p as Point2D; + } + } + + + public class TriangulationPointEnumerator : IEnumerator + { + protected IList mPoints; + protected int position = -1; // Enumerators are positioned before the first element until the first MoveNext() call. + + + public TriangulationPointEnumerator(IList points) + { + mPoints = points; + } + + public bool MoveNext() + { + position++; + return (position < mPoints.Count); + } + + public void Reset() + { + position = -1; + } + + void IDisposable.Dispose() { } + + Object IEnumerator.Current { get { return Current; } } + + public TriangulationPoint Current + { + get + { + if (position < 0 || position >= mPoints.Count) + { + return null; + } + return mPoints[position] as TriangulationPoint; + } + } + } + + + public class TriangulationPointList : Point2DList + { + + } + +} \ No newline at end of file diff --git a/Assets/Plugins/Poly2Tri/Triangulation/TriangulationPoint.cs.meta b/Assets/Plugins/Poly2Tri/Triangulation/TriangulationPoint.cs.meta new file mode 100644 index 0000000..332aa29 --- /dev/null +++ b/Assets/Plugins/Poly2Tri/Triangulation/TriangulationPoint.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d759c8fa408c9344ab9f1e8a4de1001d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Poly2Tri/Triangulation/Util.meta b/Assets/Plugins/Poly2Tri/Triangulation/Util.meta new file mode 100644 index 0000000..0630dde --- /dev/null +++ b/Assets/Plugins/Poly2Tri/Triangulation/Util.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 26805279e83c13546a2544ddbbfa3a01 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Poly2Tri/Triangulation/Util/PointGenerator.cs b/Assets/Plugins/Poly2Tri/Triangulation/Util/PointGenerator.cs new file mode 100644 index 0000000..e78a484 --- /dev/null +++ b/Assets/Plugins/Poly2Tri/Triangulation/Util/PointGenerator.cs @@ -0,0 +1,73 @@ +/* Poly2Tri + * Copyright (c) 2009-2010, Poly2Tri Contributors + * http://code.google.com/p/poly2tri/ + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of Poly2Tri nor the names of its contributors may be + * used to endorse or promote products derived from this software without specific + * prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +using System; +using System.Collections.Generic; + +namespace Poly2Tri +{ + public class PointGenerator + { + static readonly Random RNG = new Random(); + + + public static List UniformDistribution(int n, double scale) + { + List points = new List(); + for (int i = 0; i < n; i++) + { + points.Add(new TriangulationPoint(scale * (0.5 - RNG.NextDouble()), scale * (0.5 - RNG.NextDouble()))); + } + + return points; + } + + + public static List UniformGrid(int n, double scale) + { + double x = 0; + double size = scale / n; + double halfScale = 0.5 * scale; + + List points = new List(); + for (int i = 0; i < n + 1; i++) + { + x = halfScale - i * size; + for (int j = 0; j < n + 1; j++) + { + points.Add(new TriangulationPoint(x, halfScale - j * size)); + } + } + + return points; + } + } +} diff --git a/Assets/Plugins/Poly2Tri/Triangulation/Util/PointGenerator.cs.meta b/Assets/Plugins/Poly2Tri/Triangulation/Util/PointGenerator.cs.meta new file mode 100644 index 0000000..8ae8154 --- /dev/null +++ b/Assets/Plugins/Poly2Tri/Triangulation/Util/PointGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 30b228dc7fbacd740a8ee42d783fcd5f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Poly2Tri/Triangulation/Util/PolygonGenerator.cs b/Assets/Plugins/Poly2Tri/Triangulation/Util/PolygonGenerator.cs new file mode 100644 index 0000000..ef6a32c --- /dev/null +++ b/Assets/Plugins/Poly2Tri/Triangulation/Util/PolygonGenerator.cs @@ -0,0 +1,95 @@ +/* Poly2Tri + * Copyright (c) 2009-2010, Poly2Tri Contributors + * http://code.google.com/p/poly2tri/ + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of Poly2Tri nor the names of its contributors may be + * used to endorse or promote products derived from this software without specific + * prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +using System; + +namespace Poly2Tri +{ + public class PolygonGenerator + { + static readonly Random RNG = new Random(); + + private static double PI_2 = 2.0 * Math.PI; + + public static Polygon RandomCircleSweep(double scale, int vertexCount) + { + PolygonPoint point; + PolygonPoint[] points; + double radius = scale / 4; + + points = new PolygonPoint[vertexCount]; + for (int i = 0; i < vertexCount; i++) + { + do + { + if (i % 250 == 0) + { + radius += scale / 2 * (0.5 - RNG.NextDouble()); + } + else if (i % 50 == 0) + { + radius += scale / 5 * (0.5 - RNG.NextDouble()); + } + else + { + radius += 25 * scale / vertexCount * (0.5 - RNG.NextDouble()); + } + radius = radius > scale / 2 ? scale / 2 : radius; + radius = radius < scale / 10 ? scale / 10 : radius; + } while (radius < scale / 10 || radius > scale / 2); + point = new PolygonPoint(radius * Math.Cos((PI_2 * i) / vertexCount), radius * Math.Sin((PI_2 * i) / vertexCount)); + points[i] = point; + } + return new Polygon(points); + } + + public static Polygon RandomCircleSweep2(double scale, int vertexCount) + { + PolygonPoint point; + PolygonPoint[] points; + double radius = scale / 4; + + points = new PolygonPoint[vertexCount]; + for (int i = 0; i < vertexCount; i++) + { + do + { + radius += scale / 5 * (0.5 - RNG.NextDouble()); + radius = radius > scale / 2 ? scale / 2 : radius; + radius = radius < scale / 10 ? scale / 10 : radius; + } while (radius < scale / 10 || radius > scale / 2); + point = new PolygonPoint(radius * Math.Cos((PI_2 * i) / vertexCount), radius * Math.Sin((PI_2 * i) / vertexCount)); + points[i] = point; + } + return new Polygon(points); + } + } +} diff --git a/Assets/Plugins/Poly2Tri/Triangulation/Util/PolygonGenerator.cs.meta b/Assets/Plugins/Poly2Tri/Triangulation/Util/PolygonGenerator.cs.meta new file mode 100644 index 0000000..9698c70 --- /dev/null +++ b/Assets/Plugins/Poly2Tri/Triangulation/Util/PolygonGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: de075d11f8eef4d4c8f1e7053057e893 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Poly2Tri/Triangulation/Util/TriangulationUtil.cs b/Assets/Plugins/Poly2Tri/Triangulation/Util/TriangulationUtil.cs new file mode 100644 index 0000000..6c2f3cc --- /dev/null +++ b/Assets/Plugins/Poly2Tri/Triangulation/Util/TriangulationUtil.cs @@ -0,0 +1,395 @@ +/* Poly2Tri + * Copyright (c) 2009-2010, Poly2Tri Contributors + * http://code.google.com/p/poly2tri/ + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of Poly2Tri nor the names of its contributors may be + * used to endorse or promote products derived from this software without specific + * prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +using System; +using System.Collections.Generic; +using System.Text; + + +namespace Poly2Tri +{ + /** + * @author Thomas Åhlén, thahlen@gmail.com + */ + public class TriangulationUtil + { + /// + /// Requirements: + /// 1. a,b and c form a triangle. + /// 2. a and d is know to be on opposite side of bc + /// + /// a + /// + + /// / \ + /// / \ + /// b/ \c + /// +-------+ + /// / B \ + /// / \ + /// + /// Facts: + /// d has to be in area B to have a chance to be inside the circle formed by a,b and c + /// d is outside B if orient2d(a,b,d) or orient2d(c,a,d) is CW + /// This preknowledge gives us a way to optimize the incircle test + /// + /// triangle point, opposite d + /// triangle point + /// triangle point + /// point opposite a + /// true if d is inside circle, false if on circle edge + public static bool SmartIncircle(Point2D pa, Point2D pb, Point2D pc, Point2D pd) + { + double pdx = pd.X; + double pdy = pd.Y; + double adx = pa.X - pdx; + double ady = pa.Y - pdy; + double bdx = pb.X - pdx; + double bdy = pb.Y - pdy; + + double adxbdy = adx * bdy; + double bdxady = bdx * ady; + double oabd = adxbdy - bdxady; + // oabd = orient2d(pa,pb,pd); + if (oabd <= 0) + { + return false; + } + + double cdx = pc.X - pdx; + double cdy = pc.Y - pdy; + + double cdxady = cdx * ady; + double adxcdy = adx * cdy; + double ocad = cdxady - adxcdy; + // ocad = orient2d(pc,pa,pd); + if (ocad <= 0) + { + return false; + } + + double bdxcdy = bdx * cdy; + double cdxbdy = cdx * bdy; + + double alift = adx * adx + ady * ady; + double blift = bdx * bdx + bdy * bdy; + double clift = cdx * cdx + cdy * cdy; + + double det = alift * (bdxcdy - cdxbdy) + blift * ocad + clift * oabd; + + return det > 0; + } + + + public static bool InScanArea(Point2D pa, Point2D pb, Point2D pc, Point2D pd) + { + double pdx = pd.X; + double pdy = pd.Y; + double adx = pa.X - pdx; + double ady = pa.Y - pdy; + double bdx = pb.X - pdx; + double bdy = pb.Y - pdy; + + double adxbdy = adx * bdy; + double bdxady = bdx * ady; + double oabd = adxbdy - bdxady; + // oabd = orient2d(pa,pb,pd); + if (oabd <= 0) + { + return false; + } + + double cdx = pc.X - pdx; + double cdy = pc.Y - pdy; + + double cdxady = cdx * ady; + double adxcdy = adx * cdy; + double ocad = cdxady - adxcdy; + // ocad = orient2d(pc,pa,pd); + if (ocad <= 0) + { + return false; + } + return true; + } + + + /// Forumla to calculate signed area + /// Positive if CCW + /// Negative if CW + /// 0 if collinear + /// A[P1,P2,P3] = (x1*y2 - y1*x2) + (x2*y3 - y2*x3) + (x3*y1 - y3*x1) + /// = (x1-x3)*(y2-y3) - (y1-y3)*(x2-x3) + public static Orientation Orient2d(Point2D pa, Point2D pb, Point2D pc) + { + double detleft = (pa.X - pc.X) * (pb.Y - pc.Y); + double detright = (pa.Y - pc.Y) * (pb.X - pc.X); + double val = detleft - detright; + if (val > -MathUtil.EPSILON && val < MathUtil.EPSILON) + { + return Orientation.Collinear; + } + else if (val > 0) + { + return Orientation.CCW; + } + return Orientation.CW; + } + + + /////////////////////////////////////////////////////////////////////////////// + // PointRelativeToLine2D + // + // Returns -1 if point is on left of line, 0 if point is on line, and 1 if + // the point is to the right of the line. This assumes a coordinate system + // whereby the y axis goes upward when the x axis goes rightward. This is how + // 3D systems (both right and left-handed) and PostScript works, but is not + // how the Win32 GUI works. If you are using a 'y goes downward' coordinate + // system, simply negate the return value from this function. + // + // Given a point (a,b) and a line from (x1,y1) to (x2,y2), we calculate the + // following equation: + // (y2-y1)*(a-x1)-(x2-x1)*(b-y1) (left) + // If the result is > 0, the point is on 1 --------------> 2 + // the right, else left. (right) + // + // For example, with a point at (1,1) and a + // line going from (0,0) to (2,0), we get: + // (0-0)*(1-0)-(2-0)*(1-0) + // which equals: + // -2 + // Which indicates the point is (correctly) + // on the left of the directed line. + // + // This function has been checked to a good degree. + // + ///////////////////////////////////////////////////////////////////////////// + //public static double PointRelativeToLine2D(Point2D ptPoint, Point2D ptLineBegin, Point2D ptLineEnd) + //{ + // return (ptLineEnd.Y - ptLineBegin.Y) * (ptPoint.X - ptLineBegin.X) - (ptLineEnd.X - ptLineBegin.X) * (ptPoint.Y - ptLineBegin.Y); + //} + + + /////////////////////////////////////////////////////////////////////////// + // PointInBoundingBox - checks if a point is completely inside an + // axis-aligned bounding box defined by xmin, xmax, ymin, and ymax. + // Note that the point must be fully inside for this method to return + // true - it cannot lie on the border of the bounding box. + /////////////////////////////////////////////////////////////////////////// + public static bool PointInBoundingBox(double xmin, double xmax, double ymin, double ymax, Point2D p) + { + return (p.X > xmin && p.X < xmax && p.Y > ymin && p.Y < ymax); + } + + + public static bool PointOnLineSegment2D(Point2D lineStart, Point2D lineEnd, Point2D p, double epsilon) + { + return TriangulationUtil.PointOnLineSegment2D(lineStart.X, lineStart.Y, lineEnd.X, lineEnd.Y, p.X, p.Y, epsilon); + } + + + public static bool PointOnLineSegment2D(double x1, double y1, double x2, double y2, double x, double y, double epsilon) + { + // First checking if (x, z) is in the range of the line segment's end points. + if (MathUtil.IsValueBetween(x, x1, x2, epsilon) && MathUtil.IsValueBetween(y, y1, y2, epsilon)) + { + if (MathUtil.AreValuesEqual(x2 - x1, 0.0f, epsilon)) + { + // Vertical line. + return true; + } + + double slope = (y2 - y1) / (x2 - x1); + double yIntercept = -(slope * x1) + y1; + + // Checking if (x, y) is on the line passing through the end points. + double t = y - ((slope * x) + yIntercept); + + return MathUtil.AreValuesEqual(t, 0.0f, epsilon); + } + + return false; + } + + + public static bool RectsIntersect(Rect2D r1, Rect2D r2) + { + return (r1.Right > r2.Left) && + (r1.Left < r2.Right) && + (r1.Bottom > r2.Top) && + (r1.Top < r2.Bottom); + } + + + /// + /// This method detects if two line segments (or lines) intersect, + /// and, if so, the point of intersection. Use the and + /// parameters to set whether the intersection point + /// must be on the first and second line segments. Setting these + /// both to true means you are doing a line-segment to line-segment + /// intersection. Setting one of them to true means you are doing a + /// line to line-segment intersection test, and so on. + /// Note: If two line segments are coincident, then + /// no intersection is detected (there are actually + /// infinite intersection points). + /// + /// The first point of the first line segment. + /// The second point of the first line segment. + /// The first point of the second line segment. + /// The second point of the second line segment. + /// Set this to true to require that the + /// intersection point be on the first line segment. + /// Set this to true to require that the + /// intersection point be on the second line segment. + /// Set this to true to enable collisions if the line segments share + /// an endpoint + /// This is set to the intersection + /// point if an intersection is detected. + /// True if an intersection is detected, false otherwise. + public static bool LinesIntersect2D( Point2D ptStart0, Point2D ptEnd0, + Point2D ptStart1, Point2D ptEnd1, + bool firstIsSegment, bool secondIsSegment, bool coincidentEndPointCollisions, + ref Point2D pIntersectionPt, + double epsilon) + { + double d = (ptEnd0.X - ptStart0.X) * (ptStart1.Y - ptEnd1.Y) - (ptStart1.X - ptEnd1.X) * (ptEnd0.Y - ptStart0.Y); + if (Math.Abs(d) < epsilon) + { + //The lines are parallel. + return false; + } + + double d0 = (ptStart1.X - ptStart0.X) * (ptStart1.Y - ptEnd1.Y) - (ptStart1.X - ptEnd1.X) * (ptStart1.Y - ptStart0.Y); + double d1 = (ptEnd0.X - ptStart0.X) * (ptStart1.Y - ptStart0.Y) - (ptStart1.X - ptStart0.X) * (ptEnd0.Y - ptStart0.Y); + double kOneOverD = 1 / d; + double t0 = d0 * kOneOverD; + double t1 = d1 * kOneOverD; + + if ((!firstIsSegment || ((t0 >= 0.0) && (t0 <= 1.0))) && + (!secondIsSegment || ((t1 >= 0.0) && (t1 <= 1.0))) && + (coincidentEndPointCollisions || (!MathUtil.AreValuesEqual(0.0, t0, epsilon) && !MathUtil.AreValuesEqual(0.0, t1, epsilon)))) + { + if (pIntersectionPt != null) + { + pIntersectionPt.X = ptStart0.X + t0 * (ptEnd0.X - ptStart0.X); + pIntersectionPt.Y = ptStart0.Y + t0 * (ptEnd0.Y - ptStart0.Y); + } + + return true; + } + + return false; + } + + + public static bool LinesIntersect2D( Point2D ptStart0, Point2D ptEnd0, + Point2D ptStart1, Point2D ptEnd1, + ref Point2D pIntersectionPt, + double epsilon) + { + return TriangulationUtil.LinesIntersect2D(ptStart0, ptEnd0, ptStart1, ptEnd1, true, true, false, ref pIntersectionPt, epsilon); + } + + + /////////////////////////////////////////////////////////////////////////// + // RaysIntersect2D + // + // Given two lines defined by (sorry about the lame notation): + // x0 = x00 + vector_x0*s; + // y0 = y00 + vector_y0*s; + // + // x1 = x10 + vector_x1*t; + // y1 = y10 + vector_y1*t; + // + // This function determines the intersection between them, if there is any. + // + // This function assumes the lines to have no endpoints and will intersect + // them anywhere in 2D space. + // + // This algorithm taken from "Realtime-Rendering" section 10.12. + // + // This function has been checked to a good degree. + // + /////////////////////////////////////////////////////////////////////////// + public static double LI2DDotProduct(Point2D v0, Point2D v1) + { + return ((v0.X * v1.X) + (v0.Y * v1.Y)); + } + + + public static bool RaysIntersect2D( Point2D ptRayOrigin0, Point2D ptRayVector0, + Point2D ptRayOrigin1, Point2D ptRayVector1, + ref Point2D ptIntersection) + { + double kEpsilon = 0.01; + + if (ptIntersection != null) + { + //If the user wants an actual intersection result... + + //This is a vector from pLineOrigin0 to ptLineOrigin1. + Point2D ptTemp1 = new Point2D(ptRayOrigin1.X - ptRayOrigin0.X, ptRayOrigin1.Y - ptRayOrigin0.Y); + + //This is a vector perpendicular to ptVector1. + Point2D ptTemp2 = new Point2D(-ptRayVector1.Y, ptRayVector1.X); + + double fDot1 = TriangulationUtil.LI2DDotProduct(ptRayVector0, ptTemp2); + + if (Math.Abs(fDot1) < kEpsilon) + { + return false; //The lines are essentially parallel. + } + + double fDot2 = TriangulationUtil.LI2DDotProduct(ptTemp1, ptTemp2); + double s = fDot2 / fDot1; + ptIntersection.X = ptRayOrigin0.X + ptRayVector0.X * s; + ptIntersection.Y = ptRayOrigin0.Y + ptRayVector0.Y * s; + return true; + } + + //Else the user just wants to know if there is an intersection... + //In this case we need only compare the slopes of the lines. + double delta = ptRayVector1.X - ptRayVector0.X; + if (Math.Abs(delta) > kEpsilon) + { + delta = ptRayVector1.Y - ptRayVector0.Y; + if (Math.Abs(delta) > kEpsilon) + { + return true; //The lines are not parallel. + } + } + + return false; + } + + } + + +} diff --git a/Assets/Plugins/Poly2Tri/Triangulation/Util/TriangulationUtil.cs.meta b/Assets/Plugins/Poly2Tri/Triangulation/Util/TriangulationUtil.cs.meta new file mode 100644 index 0000000..ddc6a60 --- /dev/null +++ b/Assets/Plugins/Poly2Tri/Triangulation/Util/TriangulationUtil.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9973d31339415d74185f362976b190e2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Poly2Tri/Utility.meta b/Assets/Plugins/Poly2Tri/Utility.meta new file mode 100644 index 0000000..5c2007e --- /dev/null +++ b/Assets/Plugins/Poly2Tri/Utility.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1f2be784c64a930428658203464f8bc6 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Poly2Tri/Utility/FixedArray3.cs b/Assets/Plugins/Poly2Tri/Utility/FixedArray3.cs new file mode 100644 index 0000000..91b5e5d --- /dev/null +++ b/Assets/Plugins/Poly2Tri/Utility/FixedArray3.cs @@ -0,0 +1,137 @@ +/* Poly2Tri + * Copyright (c) 2009-2010, Poly2Tri Contributors + * http://code.google.com/p/poly2tri/ + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of Poly2Tri nor the names of its contributors may be + * used to endorse or promote products derived from this software without specific + * prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +using System; +using System.Collections; +using System.Collections.Generic; + +namespace Poly2Tri +{ + public struct FixedArray3 : IEnumerable where T : class + { + public T _0, _1, _2; + public T this[int index] + { + get + { + switch (index) + { + case 0: + return _0; + case 1: + return _1; + case 2: + return _2; + default: + throw new IndexOutOfRangeException(); + } + } + set + { + switch (index) + { + case 0: + _0 = value; + break; + case 1: + _1 = value; + break; + case 2: + _2 = value; + break; + default: + throw new IndexOutOfRangeException(); + } + } + } + + + public bool Contains(T value) + { + for (int i = 0; i < 3; ++i) + { + if (this[i] != null && this[i].Equals(value)) + { + return true; + } + } + + return false; + } + + + public int IndexOf(T value) + { + for (int i = 0; i < 3; ++i) + { + if (this[i] != null && this[i].Equals(value)) + { + return i; + } + } + + return -1; + } + + + public void Clear() + { + _0 = _1 = _2 = null; + } + + + public void Clear(T value) + { + for (int i = 0; i < 3; ++i) + { + if (this[i] != null && this[i].Equals(value)) + { + this[i] = null; + } + } + } + + + private IEnumerable Enumerate() + { + for (int i = 0; i < 3; ++i) + { + yield return this[i]; + } + } + + + public IEnumerator GetEnumerator() { return Enumerate().GetEnumerator(); } + + + IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); } + } +} diff --git a/Assets/Plugins/Poly2Tri/Utility/FixedArray3.cs.meta b/Assets/Plugins/Poly2Tri/Utility/FixedArray3.cs.meta new file mode 100644 index 0000000..ff237e1 --- /dev/null +++ b/Assets/Plugins/Poly2Tri/Utility/FixedArray3.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d981e23ca4f5ac84e8ca45f87420f90a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Poly2Tri/Utility/FixedBitArray3.cs b/Assets/Plugins/Poly2Tri/Utility/FixedBitArray3.cs new file mode 100644 index 0000000..49984b0 --- /dev/null +++ b/Assets/Plugins/Poly2Tri/Utility/FixedBitArray3.cs @@ -0,0 +1,137 @@ +/* Poly2Tri + * Copyright (c) 2009-2010, Poly2Tri Contributors + * http://code.google.com/p/poly2tri/ + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of Poly2Tri nor the names of its contributors may be + * used to endorse or promote products derived from this software without specific + * prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +using System; +using System.Collections; +using System.Collections.Generic; + +namespace Poly2Tri +{ + public struct FixedBitArray3 : IEnumerable + { + public bool _0, _1, _2; + public bool this[int index] + { + get + { + switch (index) + { + case 0: + return _0; + case 1: + return _1; + case 2: + return _2; + default: + throw new IndexOutOfRangeException(); + } + } + set + { + switch (index) + { + case 0: + _0 = value; + break; + case 1: + _1 = value; + break; + case 2: + _2 = value; + break; + default: + throw new IndexOutOfRangeException(); + } + } + } + + + public bool Contains(bool value) + { + for (int i = 0; i < 3; ++i) + { + if (this[i] == value) + { + return true; + } + } + + return false; + } + + + public int IndexOf(bool value) + { + for (int i = 0; i < 3; ++i) + { + if (this[i] == value) + { + return i; + } + } + + return -1; + } + + + public void Clear() + { + _0 = _1 = _2 = false; + } + + + public void Clear(bool value) + { + for (int i = 0; i < 3; ++i) + { + if (this[i] == value) + { + this[i] = false; + } + } + } + + + private IEnumerable Enumerate() + { + for (int i = 0; i < 3; ++i) + { + yield return this[i]; + } + } + + + public IEnumerator GetEnumerator() { return Enumerate().GetEnumerator(); } + + + IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); } + } +} \ No newline at end of file diff --git a/Assets/Plugins/Poly2Tri/Utility/FixedBitArray3.cs.meta b/Assets/Plugins/Poly2Tri/Utility/FixedBitArray3.cs.meta new file mode 100644 index 0000000..923db69 --- /dev/null +++ b/Assets/Plugins/Poly2Tri/Utility/FixedBitArray3.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: dd393331db7c67b4583d7563f1ecd0ad +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Poly2Tri/Utility/MathUtil.cs b/Assets/Plugins/Poly2Tri/Utility/MathUtil.cs new file mode 100644 index 0000000..3f2eedb --- /dev/null +++ b/Assets/Plugins/Poly2Tri/Utility/MathUtil.cs @@ -0,0 +1,91 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace Poly2Tri +{ + public class MathUtil + { + public static double EPSILON = 1e-12; + + + public static bool AreValuesEqual(double val1, double val2) + { + return AreValuesEqual(val1, val2, EPSILON); + } + + + public static bool AreValuesEqual(double val1, double val2, double tolerance) + { + if (val1 >= (val2 - tolerance) && val1 <= (val2 + tolerance)) + { + return true; + } + + return false; + } + + + public static bool IsValueBetween(double val, double min, double max, double tolerance) + { + if (min > max) + { + double tmp = min; + min = max; + max = tmp; + } + if ((val + tolerance) >= min && (val - tolerance) <= max) + { + return true; + } + + return false; + } + + + public static double RoundWithPrecision(double f, double precision) + { + if (precision < 0.0) + { + return f; + } + + double mul = Math.Pow(10.0, precision); + double fTemp = Math.Floor(f * mul) / mul; + + return fTemp; + } + + + public static double Clamp(double a, double low, double high) + { + return Math.Max(low, Math.Min(a, high)); + } + + + public static void Swap(ref T a, ref T b) + { + T tmp = a; + a = b; + b = tmp; + } + + + public static uint Jenkins32Hash(byte[] data, uint nInitialValue) + { + foreach (byte b in data) + { + nInitialValue += (uint)b; + nInitialValue += (nInitialValue << 10); + nInitialValue += (nInitialValue >> 6); + } + + nInitialValue += (nInitialValue << 3); + nInitialValue ^= (nInitialValue >> 11); + nInitialValue += (nInitialValue << 15); + + return nInitialValue; + } + } +} diff --git a/Assets/Plugins/Poly2Tri/Utility/MathUtil.cs.meta b/Assets/Plugins/Poly2Tri/Utility/MathUtil.cs.meta new file mode 100644 index 0000000..4bc031e --- /dev/null +++ b/Assets/Plugins/Poly2Tri/Utility/MathUtil.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8d6dd55f740849b41994d1d937652e56 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Poly2Tri/Utility/Point2D.cs b/Assets/Plugins/Poly2Tri/Utility/Point2D.cs new file mode 100644 index 0000000..ea4f49a --- /dev/null +++ b/Assets/Plugins/Poly2Tri/Utility/Point2D.cs @@ -0,0 +1,262 @@ +/* Poly2Tri + * Copyright (c) 2009-2010, Poly2Tri Contributors + * http://code.google.com/p/poly2tri/ + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of Poly2Tri nor the names of its contributors may be + * used to endorse or promote products derived from this software without specific + * prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +using System; +using System.Collections; +using System.Collections.Generic; + + +namespace Poly2Tri +{ + public class Point2D : IComparable + { + protected double mX = 0.0; + public virtual double X { get { return mX; } set { mX = value; } } + protected double mY = 0.0; + public virtual double Y { get { return mY; } set { mY = value; } } + + public float Xf { get { return (float)X; } } + public float Yf { get { return (float)Y; } } + + + public Point2D() + { + mX = 0.0; + mY = 0.0; + } + + + public Point2D(double x, double y) + { + mX = x; + mY = y; + } + + + public Point2D(Point2D p) + { + mX = p.X; + mY = p.Y; + } + + + public override string ToString() + { + return "[" + X.ToString() + "," + Y.ToString() + "]"; + } + + + public override int GetHashCode() + { + return base.GetHashCode(); + } + + + public override bool Equals(Object obj) + { + Point2D p = obj as Point2D; + if (p != null) + { + return Equals(p); + } + + return base.Equals(obj); + } + + + public bool Equals(Point2D p) + { + return Equals(p, 0.0); + } + + + public bool Equals(Point2D p, double epsilon) + { + if ((object)p == null || !MathUtil.AreValuesEqual(X, p.X, epsilon) || !MathUtil.AreValuesEqual(Y, p.Y, epsilon)) + { + return false; + } + + return true; + } + + + public int CompareTo(Point2D other) + { + if (Y < other.Y) + { + return -1; + } + else if (Y > other.Y) + { + return 1; + } + else + { + if (X < other.X) + { + return -1; + } + else if (X > other.X) + { + return 1; + } + } + + return 0; + } + + + public virtual void Set(double x, double y) { X = x; Y = y; } + public virtual void Set(Point2D p) { X = p.X; Y = p.Y; } + + public void Add(Point2D p) { X += p.X; Y += p.Y; } + public void Add(double scalar) { X += scalar; Y += scalar; } + public void Subtract(Point2D p) { X -= p.X; Y -= p.Y; } + public void Subtract(double scalar) { X -= scalar; Y -= scalar; } + public void Multiply(Point2D p) { X *= p.X; Y *= p.Y; } + public void Multiply(double scalar) { X *= scalar; Y *= scalar; } + public void Divide(Point2D p) { X /= p.X; Y /= p.Y; } + public void Divide(double scalar) { X /= scalar; Y /= scalar; } + public void Negate() { X = -X; Y = -Y; } + public double Magnitude() { return Math.Sqrt((X * X) + (Y * Y)); } + public double MagnitudeSquared() { return (X * X) + (Y * Y); } + public double MagnitudeReciprocal() { return 1.0 / Magnitude(); } + public void Normalize() { Multiply(MagnitudeReciprocal()); } + public double Dot(Point2D p) { return (X * p.X) + (Y * p.Y); } + public double Cross(Point2D p) { return (X * p.Y) - (Y * p.X); } + public void Clamp(Point2D low, Point2D high) { X = Math.Max(low.X, Math.Min(X, high.X)); Y = Math.Max(low.Y, Math.Min(Y, high.Y)); } + public void Abs() { X = Math.Abs(X); Y = Math.Abs(Y); } + public void Reciprocal() { if (X != 0.0 && Y != 0.0) { X = 1.0 / X; Y = 1.0 / Y; } } + + public void Translate(Point2D vector) { Add(vector); } + public void Translate(double x, double y) { X += x; Y += y; } + public void Scale(Point2D vector) { Multiply(vector); } + public void Scale(double scalar) { Multiply(scalar); } + public void Scale(double x, double y) { X *= x; Y *= y; } + public void Rotate(double radians) + { + double cosr = Math.Cos(radians); + double sinr = Math.Sin(radians); + double xold = X; + double yold = Y; + X = (xold * cosr) - (yold * sinr); + Y = (xold * sinr) + (yold * cosr); + } + public void RotateDegrees(double degrees) + { + double radians = degrees * Math.PI / 180.0; + Rotate(radians); + } + + public static double Dot(Point2D lhs, Point2D rhs) { return (lhs.X * rhs.X) + (lhs.Y * rhs.Y); } + public static double Cross(Point2D lhs, Point2D rhs) { return (lhs.X * rhs.Y) - (lhs.Y * rhs.X); } + public static Point2D Clamp(Point2D a, Point2D low, Point2D high) { Point2D p = new Point2D(a); p.Clamp(low, high); return p; } + public static Point2D Min(Point2D a, Point2D b) { Point2D p = new Point2D(); p.X = Math.Min(a.X, b.X); p.Y = Math.Min(a.Y, b.Y); return p; } + public static Point2D Max(Point2D a, Point2D b) { Point2D p = new Point2D(); p.X = Math.Max(a.X, b.X); p.Y = Math.Max(a.Y, b.Y); return p; } + public static Point2D Abs(Point2D a) { Point2D p = new Point2D(Math.Abs(a.X), Math.Abs(a.Y)); return p; } + public static Point2D Reciprocal(Point2D a) { Point2D p = new Point2D(1.0 / a.X, 1.0 / a.Y); return p; } + + // returns a scaled perpendicular vector. Which direction it goes depends on the order in which the arguments are passed + public static Point2D Perpendicular(Point2D lhs, double scalar) { Point2D p = new Point2D(lhs.Y * scalar, lhs.X * -scalar); return p; } + public static Point2D Perpendicular(double scalar, Point2D rhs) { Point2D p = new Point2D(-scalar * rhs.Y, scalar * rhs.X); return p; } + + + // + // operator overloading + // + + // Binary Operators + // Note that in C#, when a binary operator is overloaded, its corresponding compound assignment operator is also automatically + // overloaded. So, for example, overloading operator + implicitly overloads += as well + public static Point2D operator +(Point2D lhs, Point2D rhs) { Point2D result = new Point2D(lhs); result.Add(rhs); return result; } + public static Point2D operator +(Point2D lhs, double scalar) { Point2D result = new Point2D(lhs); result.Add(scalar); return result; } + public static Point2D operator -(Point2D lhs, Point2D rhs) { Point2D result = new Point2D(lhs); result.Subtract(rhs); return result; } + public static Point2D operator -(Point2D lhs, double scalar) { Point2D result = new Point2D(lhs); result.Subtract(scalar); return result; } + public static Point2D operator *(Point2D lhs, Point2D rhs) { Point2D result = new Point2D(lhs); result.Multiply(rhs); return result; } + public static Point2D operator *(Point2D lhs, double scalar) { Point2D result = new Point2D(lhs); result.Multiply(scalar); return result; } + public static Point2D operator *(double scalar, Point2D lhs) { Point2D result = new Point2D(lhs); result.Multiply(scalar); return result; } + public static Point2D operator /(Point2D lhs, Point2D rhs) { Point2D result = new Point2D(lhs); result.Divide(rhs); return result; } + public static Point2D operator /(Point2D lhs, double scalar) { Point2D result = new Point2D(lhs); result.Divide(scalar); return result; } + + // Unary Operators + public static Point2D operator -(Point2D p) { Point2D tmp = new Point2D(p); tmp.Negate(); return tmp; } + + // Relational Operators + //public static bool operator ==(Point2D lhs, Point2D rhs) { if ((object)lhs != null) { return lhs.Equals(rhs, 0.0); } if ((object)rhs == null) { return true; } else { return false; } } + //public static bool operator !=(Point2D lhs, Point2D rhs) { if ((object)lhs != null) { return !lhs.Equals(rhs, 0.0); } if ((object)rhs == null) { return false; } else { return true; } } + public static bool operator <(Point2D lhs, Point2D rhs) { return (lhs.CompareTo(rhs) == -1) ? true : false; } + public static bool operator >(Point2D lhs, Point2D rhs) { return (lhs.CompareTo(rhs) == 1) ? true : false; } + public static bool operator <=(Point2D lhs, Point2D rhs) { return (lhs.CompareTo(rhs) <= 0) ? true : false; } + public static bool operator >=(Point2D lhs, Point2D rhs) { return (lhs.CompareTo(rhs) >= 0) ? true : false; } + } + + + public class Point2DEnumerator : IEnumerator + { + protected IList mPoints; + protected int position = -1; // Enumerators are positioned before the first element until the first MoveNext() call. + + + public Point2DEnumerator(IList points) + { + mPoints = points; + } + + public bool MoveNext() + { + position++; + return (position < mPoints.Count); + } + + public void Reset() + { + position = -1; + } + + void IDisposable.Dispose() { } + + Object IEnumerator.Current { get { return Current; } } + + public Point2D Current + { + get + { + if (position < 0 || position >= mPoints.Count) + { + return null; + } + return mPoints[position]; + } + } + } + +} diff --git a/Assets/Plugins/Poly2Tri/Utility/Point2D.cs.meta b/Assets/Plugins/Poly2Tri/Utility/Point2D.cs.meta new file mode 100644 index 0000000..f962348 --- /dev/null +++ b/Assets/Plugins/Poly2Tri/Utility/Point2D.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6906e61511580494d946ed1a07dd0e82 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Poly2Tri/Utility/Point2DList.cs b/Assets/Plugins/Poly2Tri/Utility/Point2DList.cs new file mode 100644 index 0000000..0071d39 --- /dev/null +++ b/Assets/Plugins/Poly2Tri/Utility/Point2DList.cs @@ -0,0 +1,1027 @@ +/* Poly2Tri + * Copyright (c) 2009-2010, Poly2Tri Contributors + * http://code.google.com/p/poly2tri/ + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of Poly2Tri nor the names of its contributors may be + * used to endorse or promote products derived from this software without specific + * prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * The Following notice applies to the Methods CheckPolygon and + * MergeParallelEdges. Both are altered only enough to convert to C# + * and take advantage of some of C#'s language features. Any errors + * are thus mine from the conversion and not Eric's. + * + * Copyright (c) 2007 Eric Jordan + * + * 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 System; +using System.Collections; +using System.Collections.Generic; +using System.Text; + + +namespace Poly2Tri +{ + public class Point2DList : IEnumerable, IList // : List + { + public static readonly int kMaxPolygonVertices = 100000; // adjust to suit... + + /// A small length used as a collision and constraint tolerance. Usually it is + /// chosen to be numerically significant, but visually insignificant. + public static readonly double kLinearSlop = 0.005; + + /// A small angle used as a collision and constraint tolerance. Usually it is + /// chosen to be numerically significant, but visually insignificant. + public static readonly double kAngularSlop = (2.0 / (180.0 * Math.PI)); + + public enum WindingOrderType + { + CW, + CCW, + Unknown, + + Default = CCW, + } + + [Flags] + public enum PolygonError : uint + { + None = 0, + NotEnoughVertices = 1 << 0, + NotConvex = 1 << 1, + NotSimple = 1 << 2, + AreaTooSmall = 1 << 3, + SidesTooCloseToParallel = 1 << 4, + TooThin = 1 << 5, + Degenerate = 1 << 6, + Unknown = 1 << 30, + } + + + protected List mPoints = new List(); + protected Rect2D mBoundingBox = new Rect2D(); + protected WindingOrderType mWindingOrder = WindingOrderType.Unknown; + protected double mEpsilon = MathUtil.EPSILON; // Epsilon is a function of the size of the bounds of the polygon + + public Rect2D BoundingBox { get { return mBoundingBox; } } + public WindingOrderType WindingOrder + { + get { return mWindingOrder; } + set + { + if (mWindingOrder == WindingOrderType.Unknown) + { + mWindingOrder = CalculateWindingOrder(); + } + if (value != mWindingOrder) + { + mPoints.Reverse(); + mWindingOrder = value; + } + } + } + public double Epsilon { get { return mEpsilon; } } + public Point2D this[int index] + { + get { return mPoints[index]; } + set { mPoints[index] = value; } + } + public int Count { get { return mPoints.Count; } } + public virtual bool IsReadOnly { get { return false; } } + + + public Point2DList() + { + } + + + public Point2DList(int capacity) + { + mPoints.Capacity = capacity; + } + + + public Point2DList(IList l) + { + AddRange(l.GetEnumerator(), WindingOrderType.Unknown); + } + + + public Point2DList(Point2DList l) + { + int numPoints = l.Count; + for (int i = 0; i < numPoints; ++i) + { + mPoints.Add(l[i]); + } + mBoundingBox.Set(l.BoundingBox); + mEpsilon = l.Epsilon; + mWindingOrder = l.WindingOrder; + } + + + public override string ToString() + { + StringBuilder builder = new StringBuilder(); + for (int i = 0; i < Count; i++) + { + builder.Append(this[i].ToString()); + if (i < Count - 1) + { + builder.Append(" "); + } + } + return builder.ToString(); + } + + + IEnumerator IEnumerable.GetEnumerator() + { + return mPoints.GetEnumerator(); + } + + + IEnumerator IEnumerable.GetEnumerator() + { + return new Point2DEnumerator(mPoints); + } + + + public void Clear() + { + mPoints.Clear(); + mBoundingBox.Clear(); + mEpsilon = MathUtil.EPSILON; + mWindingOrder = WindingOrderType.Unknown; + } + + + public int IndexOf(Point2D p) + { + return mPoints.IndexOf(p); + } + + + public virtual void Add(Point2D p) + { + Add(p, -1, true); + } + + + protected virtual void Add(Point2D p, int idx, bool bCalcWindingOrderAndEpsilon) + { + if (idx < 0) + { + mPoints.Add(p); + } + else + { + mPoints.Insert(idx, p); + } + mBoundingBox.AddPoint(p); + if (bCalcWindingOrderAndEpsilon) + { + if (mWindingOrder == WindingOrderType.Unknown) + { + mWindingOrder = CalculateWindingOrder(); + } + mEpsilon = CalculateEpsilon(); + } + } + + + public virtual void AddRange(Point2DList l) + { + AddRange(l.mPoints.GetEnumerator(), l.WindingOrder); + } + + + public virtual void AddRange(IEnumerator iter, WindingOrderType windingOrder) + { + if (iter == null) + { + return; + } + + if (mWindingOrder == WindingOrderType.Unknown && Count == 0) + { + mWindingOrder = windingOrder; + } + bool bReverseReadOrder = (WindingOrder != WindingOrderType.Unknown) && (windingOrder != WindingOrderType.Unknown) && (WindingOrder != windingOrder); + bool bAddedFirst = true; + int startCount = mPoints.Count; + iter.Reset(); + while (iter.MoveNext()) + { + if (!bAddedFirst) + { + bAddedFirst = true; + mPoints.Add(iter.Current); + } + else if (bReverseReadOrder) + { + mPoints.Insert(startCount, iter.Current); + } + else + { + mPoints.Add(iter.Current); + } + mBoundingBox.AddPoint(iter.Current); + } + if (mWindingOrder == WindingOrderType.Unknown && windingOrder == WindingOrderType.Unknown) + { + mWindingOrder = CalculateWindingOrder(); + } + mEpsilon = CalculateEpsilon(); + } + + + public virtual void Insert(int idx, Point2D item) + { + Add(item, idx, true); + } + + + public virtual bool Remove(Point2D p) + { + if (mPoints.Remove(p)) + { + CalculateBounds(); + mEpsilon = CalculateEpsilon(); + return true; + } + + return false; + } + + + public virtual void RemoveAt(int idx) + { + if (idx < 0 || idx >= Count) + { + return; + } + mPoints.RemoveAt(idx); + CalculateBounds(); + mEpsilon = CalculateEpsilon(); + } + + + public virtual void RemoveRange(int idxStart, int count) + { + if (idxStart < 0 || idxStart >= Count) + { + return; + } + if (count == 0) + { + return; + } + + mPoints.RemoveRange(idxStart, count); + CalculateBounds(); + mEpsilon = CalculateEpsilon(); + } + + + public bool Contains(Point2D p) + { + return mPoints.Contains(p); + } + + + public void CopyTo(Point2D[] array, int arrayIndex) + { + int numElementsToCopy = Math.Min(Count, array.Length - arrayIndex); + for (int i = 0; i < numElementsToCopy; ++i) + { + array[arrayIndex + i] = mPoints[i]; + } + } + + + public void CalculateBounds() + { + mBoundingBox.Clear(); + foreach (Point2D pt in mPoints) + { + mBoundingBox.AddPoint(pt); + } + } + + + public double CalculateEpsilon() + { + return Math.Max(Math.Min(mBoundingBox.Width, mBoundingBox.Height) * 0.001f, MathUtil.EPSILON); + } + + + public WindingOrderType CalculateWindingOrder() + { + // the sign of the 'area' of the polygon is all we are interested in. + double area = GetSignedArea(); + if (area < 0.0) + { + return WindingOrderType.CW; + } + else if (area > 0.0) + { + return WindingOrderType.CCW; + } + + // error condition - not even verts to calculate, non-simple poly, etc. + return WindingOrderType.Unknown; + } + + + public int NextIndex(int index) + { + if (index == Count - 1) + { + return 0; + } + return index + 1; + } + + + /// + /// Gets the previous index. + /// + /// The index. + /// + public int PreviousIndex(int index) + { + if (index == 0) + { + return Count - 1; + } + return index - 1; + } + + + /// + /// Gets the signed area. + /// + /// + public double GetSignedArea() + { + double area = 0.0; + for (int i = 0; i < Count; i++) + { + int j = (i + 1) % Count; + area += this[i].X * this[j].Y; + area -= this[i].Y * this[j].X; + } + area /= 2.0f; + + return area; + } + + + /// + /// Gets the area. + /// + /// + public double GetArea() + { + int i; + double area = 0; + + for (i = 0; i < Count; i++) + { + int j = (i + 1) % Count; + area += this[i].X * this[j].Y; + area -= this[i].Y * this[j].X; + } + area /= 2.0f; + return (area < 0 ? -area : area); + } + + + /// + /// Gets the centroid. + /// + /// + public Point2D GetCentroid() + { + // Same algorithm is used by Box2D + + Point2D c = new Point2D(); + double area = 0.0f; + + const double inv3 = 1.0 / 3.0; + Point2D pRef = new Point2D(); + for (int i = 0; i < Count; ++i) + { + // Triangle vertices. + Point2D p1 = pRef; + Point2D p2 = this[i]; + Point2D p3 = i + 1 < Count ? this[i + 1] : this[0]; + + Point2D e1 = p2 - p1; + Point2D e2 = p3 - p1; + + double D = Point2D.Cross(e1, e2); + + double triangleArea = 0.5f * D; + area += triangleArea; + + // Area weighted centroid + c += triangleArea * inv3 * (p1 + p2 + p3); + } + + // Centroid + c *= 1.0f / area; + return c; + } + + + // /// + /// Translates the vertices with the specified vector. + /// + /// The vector. + public void Translate(Point2D vector) + { + for (int i = 0; i < Count; i++) + { + this[i] += vector; + } + } + + + /// + /// Scales the vertices with the specified vector. + /// + /// The Value. + public void Scale(Point2D value) + { + for (int i = 0; i < Count; i++) + { + this[i] *= value; + } + } + + + /// + /// Rotate the vertices with the defined value in radians. + /// + /// The amount to rotate by in radians. + public void Rotate(double radians) + { + // kickin' it old-skool since I don't want to create a Matrix class for now. + double cosr = Math.Cos(radians); + double sinr = Math.Sin(radians); + foreach (Point2D p in mPoints) + { + double xold = p.X; + p.X = xold * cosr - p.Y * sinr; + p.Y = xold * sinr + p.Y * cosr; + } + } + + // A degenerate polygon is one in which some vertex lies on an edge joining two other vertices. + // This can happen in one of two ways: either the vertices V(i-1), V(i), and V(i+1) can be collinear or + // the vertices V(i) and V(i+1) can overlap (fail to be distinct). In either of these cases, our polygon of + // n vertices will appear to have n - 1 or fewer -- it will have "degenerated" from an n-gon to an (n-1)-gon. + // (In the case of triangles, this will result in either a line segment or a point.) + public bool IsDegenerate() + { + if (Count < 3) + { + return false; + } + if (Count < 3) + { + return false; + } + for (int k = 0; k < Count; ++k) + { + int j = PreviousIndex(k); + if (mPoints[j].Equals(mPoints[k], Epsilon)) + { + return true; + } + int i = PreviousIndex(j); + Orientation orientation = TriangulationUtil.Orient2d(mPoints[i], mPoints[j], mPoints[k]); + if (orientation == Orientation.Collinear) + { + return true; + } + } + + return false; + } + + + /// + /// Assuming the polygon is simple; determines whether the polygon is convex. + /// + /// + /// true if it is convex; otherwise, false. + /// + public bool IsConvex() + { + bool isPositive = false; + + for (int i = 0; i < Count; ++i) + { + int lower = (i == 0) ? (Count - 1) : (i - 1); + int middle = i; + int upper = (i == Count - 1) ? (0) : (i + 1); + + double dx0 = this[middle].X - this[lower].X; + double dy0 = this[middle].Y - this[lower].Y; + double dx1 = this[upper].X - this[middle].X; + double dy1 = this[upper].Y - this[middle].Y; + + double cross = dx0 * dy1 - dx1 * dy0; + + // Cross product should have same sign + // for each vertex if poly is convex. + bool newIsP = (cross >= 0) ? true : false; + if (i == 0) + { + isPositive = newIsP; + } + else if (isPositive != newIsP) + { + return false; + } + } + + return true; + } + + + /// + /// Check for edge crossings + /// + /// + public bool IsSimple() + { + for (int i = 0; i < Count; ++i) + { + int iplus = NextIndex(i); + for (int j = i + 1; j < Count; ++j) + { + int jplus = NextIndex(j); + Point2D temp = null; + if (TriangulationUtil.LinesIntersect2D(mPoints[i], mPoints[iplus], mPoints[j], mPoints[jplus], ref temp, mEpsilon)) + { + return false; + } + } + } + return true; + } + + + /// + /// Checks if polygon is valid for use in Box2d engine. + /// Last ditch effort to ensure no invalid polygons are + /// added to world geometry. + /// + /// Performs a full check, for simplicity, convexity, + /// orientation, minimum angle, and volume. This won't + /// be very efficient, and a lot of it is redundant when + /// other tools in this section are used. + /// + /// From Eric Jordan's convex decomposition library + /// + /// + /// + public PolygonError CheckPolygon() + { + PolygonError error = PolygonError.None; + if (Count < 3 || Count > Point2DList.kMaxPolygonVertices) + { + error |= PolygonError.NotEnoughVertices; + // no other tests will be valid at this point, so just return + return error; + } + if (IsDegenerate()) + { + error |= PolygonError.Degenerate; + } + //bool bIsConvex = IsConvex(); + //if (!IsConvex()) + //{ + // error |= PolygonError.NotConvex; + //} + if (!IsSimple()) + { + error |= PolygonError.NotSimple; + } + if (GetArea() < MathUtil.EPSILON) + { + error |= PolygonError.AreaTooSmall; + } + + // the following tests don't make sense if the polygon is not simple + if ((error & PolygonError.NotSimple) != PolygonError.NotSimple) + { + bool bReversed = false; + WindingOrderType expectedWindingOrder = WindingOrderType.CCW; + WindingOrderType reverseWindingOrder = WindingOrderType.CW; + if (WindingOrder == reverseWindingOrder) + { + WindingOrder = expectedWindingOrder; + bReversed = true; + } + + //Compute normals + Point2D[] normals = new Point2D[Count]; + Point2DList vertices = new Point2DList(Count); + for (int i = 0; i < Count; ++i) + { + vertices.Add(new Point2D(this[i].X, this[i].Y)); + int i1 = i; + int i2 = NextIndex(i); + Point2D edge = new Point2D(this[i2].X - this[i1].X, this[i2].Y - this[i1].Y); + normals[i] = Point2D.Perpendicular(edge, 1.0); + normals[i].Normalize(); + } + + //Required side checks + for (int i = 0; i < Count; ++i) + { + int iminus = PreviousIndex(i); + + //Parallel sides check + double cross = Point2D.Cross(normals[iminus], normals[i]); + cross = MathUtil.Clamp(cross, -1.0f, 1.0f); + float angle = (float)Math.Asin(cross); + if (Math.Abs(angle) <= Point2DList.kAngularSlop) + { + error |= PolygonError.SidesTooCloseToParallel; + break; + } + + // For some reason, the following checks do not seem to work + // correctly in all cases - they return false positives. + // //Too skinny check - only valid for convex polygons + // if (bIsConvex) + // { + // for (int j = 0; j < Count; ++j) + // { + // if (j == i || j == NextIndex(i)) + // { + // continue; + // } + // Point2D testVector = vertices[j] - vertices[i]; + // testVector.Normalize(); + // double s = Point2D.Dot(testVector, normals[i]); + // if (s >= -Point2DList.kLinearSlop) + // { + // error |= PolygonError.TooThin; + // } + // } + + // Point2D centroid = vertices.GetCentroid(); + // Point2D n1 = normals[iminus]; + // Point2D n2 = normals[i]; + // Point2D v = vertices[i] - centroid; + + // Point2D d = new Point2D(); + // d.X = Point2D.Dot(n1, v); // - toiSlop; + // d.Y = Point2D.Dot(n2, v); // - toiSlop; + + // // Shifting the edge inward by toiSlop should + // // not cause the plane to pass the centroid. + // if ((d.X < 0.0f) || (d.Y < 0.0f)) + // { + // error |= PolygonError.TooThin; + // } + // } + } + + if (bReversed) + { + WindingOrder = reverseWindingOrder; + } + } + + //if (error != PolygonError.None) + //{ + // Console.WriteLine("Found invalid polygon: {0} {1}\n", Point2DList.GetErrorString(error), this.ToString()); + //} + + return error; + } + + + public static string GetErrorString(PolygonError error) + { + StringBuilder sb = new StringBuilder(256); + if (error == PolygonError.None) + { + sb.AppendFormat("No errors.\n"); + } + else + { + if ((error & PolygonError.NotEnoughVertices) == PolygonError.NotEnoughVertices) + { + sb.AppendFormat("NotEnoughVertices: must have between 3 and {0} vertices.\n", kMaxPolygonVertices); + } + if ((error & PolygonError.NotConvex) == PolygonError.NotConvex) + { + sb.AppendFormat("NotConvex: Polygon is not convex.\n"); + } + if ((error & PolygonError.NotSimple) == PolygonError.NotSimple) + { + sb.AppendFormat("NotSimple: Polygon is not simple (i.e. it intersects itself).\n"); + } + if ((error & PolygonError.AreaTooSmall) == PolygonError.AreaTooSmall) + { + sb.AppendFormat("AreaTooSmall: Polygon's area is too small.\n"); + } + if ((error & PolygonError.SidesTooCloseToParallel) == PolygonError.SidesTooCloseToParallel) + { + sb.AppendFormat("SidesTooCloseToParallel: Polygon's sides are too close to parallel.\n"); + } + if ((error & PolygonError.TooThin) == PolygonError.TooThin) + { + sb.AppendFormat("TooThin: Polygon is too thin or core shape generation would move edge past centroid.\n"); + } + if ((error & PolygonError.Degenerate) == PolygonError.Degenerate) + { + sb.AppendFormat("Degenerate: Polygon is degenerate (contains collinear points or duplicate coincident points).\n"); + } + if ((error & PolygonError.Unknown) == PolygonError.Unknown) + { + sb.AppendFormat("Unknown: Unknown Polygon error!.\n"); + } + } + + return sb.ToString(); + } + + + /// + /// Removes duplicate points that lie next to each other in the list + /// + public void RemoveDuplicateNeighborPoints() + { + int numPoints = Count; + int i = numPoints - 1; + int j = 0; + while (numPoints > 1 && j < numPoints) + { + if(mPoints[i].Equals(mPoints[j])) + { + int idxToRemove = Math.Max(i, j); + mPoints.RemoveAt(idxToRemove); + --numPoints; + if (i >= numPoints) + { + // can happen if first element in list is deleted... + i = numPoints - 1; + } + // don't increment i, j in this case because we want to check i against the new value at j + } + else + { + i = NextIndex(i); + ++j; // intentionally not wrapping value of j so we have a valid end-point for the loop + } + } + } + + + /// + /// Removes all collinear points on the polygon. + /// Has a default bias of 0 + /// + /// The polygon that needs simplification. + /// A simplified polygon. + public void Simplify() + { + Simplify(0.0); + } + + + /// + /// Removes all collinear points on the polygon. Note that this is NOT safe to run on a complex + /// polygon as it will remove points that it should not. For example, consider this polygon: + /// + /// 2 + /// + + /// / \ + /// / \ + /// / \ + /// 0 +---+-------+ + /// 3 1 + /// + /// This algorithm would delete point 3, leaving you with the polygon 0,1,2 - definitely NOT the correct + /// polygon. Caveat Emptor! + /// + /// + /// The polygon that needs simplification. + /// The distance bias between points. Points closer than this will be 'joined'. + /// A simplified polygon. + public void Simplify(double bias) + { + //We can't simplify polygons under 3 vertices + if (Count < 3) + { + return; + } + +//#if DEBUG +// if (!IsSimple()) +// { +// throw new Exception("Do not run Simplify on a non-simple polygon!"); +// } +//#endif + + int curr = 0; + int numVerts = Count; + double biasSquared = bias * bias; + while (curr < numVerts && numVerts >= 3) + { + int prevId = PreviousIndex(curr); + int nextId = NextIndex(curr); + + Point2D prev = this[prevId]; + Point2D current = this[curr]; + Point2D next = this[nextId]; + + //If they are closer than the bias, continue + if ((prev - current).MagnitudeSquared() <= biasSquared) + { + RemoveAt(curr); + --numVerts; + continue; + } + + //If they collinear, continue + Orientation orientation = TriangulationUtil.Orient2d(prev, current, next); + if (orientation == Orientation.Collinear) + { + RemoveAt(curr); + --numVerts; + continue; + } + + ++curr; + } + } + + + // From Eric Jordan's convex decomposition library + /// + /// Merges all parallel edges in the list of vertices + /// + /// + public void MergeParallelEdges(double tolerance) + { + if (Count <= 3) + { + // Can't do anything useful here to a triangle + return; + } + + bool[] mergeMe = new bool[Count]; + int newNVertices = Count; + + //Gather points to process + for (int i = 0; i < Count; ++i) + { + int lower = (i == 0) ? (Count - 1) : (i - 1); + int middle = i; + int upper = (i == Count - 1) ? (0) : (i + 1); + + double dx0 = this[middle].X - this[lower].X; + double dy0 = this[middle].Y - this[lower].Y; + double dx1 = this[upper].Y - this[middle].X; + double dy1 = this[upper].Y - this[middle].Y; + double norm0 = Math.Sqrt(dx0 * dx0 + dy0 * dy0); + double norm1 = Math.Sqrt(dx1 * dx1 + dy1 * dy1); + + if (!(norm0 > 0.0 && norm1 > 0.0) && newNVertices > 3) + { + //Merge identical points + mergeMe[i] = true; + --newNVertices; + } + + dx0 /= norm0; + dy0 /= norm0; + dx1 /= norm1; + dy1 /= norm1; + double cross = dx0 * dy1 - dx1 * dy0; + double dot = dx0 * dx1 + dy0 * dy1; + + if (Math.Abs(cross) < tolerance && dot > 0 && newNVertices > 3) + { + mergeMe[i] = true; + --newNVertices; + } + else + { + mergeMe[i] = false; + } + } + + if (newNVertices == Count || newNVertices == 0) + { + return; + } + + int currIndex = 0; + + // Copy the vertices to a new list and clear the old + Point2DList oldVertices = new Point2DList(this); + Clear(); + + for (int i = 0; i < oldVertices.Count; ++i) + { + if (mergeMe[i] || newNVertices == 0 || currIndex == newNVertices) + { + continue; + } + + if (currIndex >= newNVertices) + { + throw new Exception("Point2DList::MergeParallelEdges - currIndex[ " + currIndex.ToString() + "] >= newNVertices[" + newNVertices + "]"); + } + + mPoints.Add(oldVertices[i]); + mBoundingBox.AddPoint(oldVertices[i]); + ++currIndex; + } + mWindingOrder = CalculateWindingOrder(); + mEpsilon = CalculateEpsilon(); + } + + + /// + /// Projects to axis. + /// + /// The axis. + /// The min. + /// The max. + public void ProjectToAxis(Point2D axis, out double min, out double max) + { + // To project a point on an axis use the dot product + double dotProduct = Point2D.Dot(axis, this[0]); + min = dotProduct; + max = dotProduct; + + for (int i = 0; i < Count; i++) + { + dotProduct = Point2D.Dot(this[i], axis); + if (dotProduct < min) + { + min = dotProduct; + } + else + { + if (dotProduct > max) + { + max = dotProduct; + } + } + } + } + } +} diff --git a/Assets/Plugins/Poly2Tri/Utility/Point2DList.cs.meta b/Assets/Plugins/Poly2Tri/Utility/Point2DList.cs.meta new file mode 100644 index 0000000..d5cf9c0 --- /dev/null +++ b/Assets/Plugins/Poly2Tri/Utility/Point2DList.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: dd6f3a734edccfb4d912e7d1322c5d83 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Poly2Tri/Utility/Rect2D.cs b/Assets/Plugins/Poly2Tri/Utility/Rect2D.cs new file mode 100644 index 0000000..e16c68d --- /dev/null +++ b/Assets/Plugins/Poly2Tri/Utility/Rect2D.cs @@ -0,0 +1,321 @@ +/* Poly2Tri + * Copyright (c) 2009-2010, Poly2Tri Contributors + * http://code.google.com/p/poly2tri/ + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of Poly2Tri nor the names of its contributors may be + * used to endorse or promote products derived from this software without specific + * prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +using System; + + +namespace Poly2Tri +{ + public class Rect2D + { + private double mMinX; // left + private double mMaxX; // right + private double mMinY; // bottom // top + private double mMaxY; // top // bottom + + public double MinX { get { return mMinX; } set { mMinX = value; } } + public double MaxX { get { return mMaxX; } set { mMaxX = value; } } + public double MinY { get { return mMinY; } set { mMinY = value; } } + public double MaxY { get { return mMaxY; } set { mMaxY = value; } } + public double Left { get { return mMinX; } set { mMinX = value; } } + public double Right { get { return mMaxX; } set { mMaxX = value; } } + public double Top { get { return mMaxY; } set { mMaxY = value; } } + public double Bottom { get { return mMinY; } set { mMinY = value; } } + + public double Width { get { return (Right - Left); } } + public double Height { get { return (Top - Bottom); } } + public bool Empty { get { return (Left == Right) || (Top == Bottom); } } + + + public Rect2D() + { + Clear(); + } + + + public override int GetHashCode() + { + return base.GetHashCode(); + } + + + public override bool Equals(Object obj) + { + Rect2D r = obj as Rect2D; + if( r != null) + { + return Equals(r); + } + + return base.Equals(obj); + } + + + public bool Equals(Rect2D r) + { + return Equals(r, MathUtil.EPSILON); + } + + + public bool Equals(Rect2D r, double epsilon) + { + if (!MathUtil.AreValuesEqual(MinX, r.MinX, epsilon)) + { + return false; + } + if (!MathUtil.AreValuesEqual(MaxX, r.MaxX)) + { + return false; + } + if (!MathUtil.AreValuesEqual(MinY, r.MinY, epsilon)) + { + return false; + } + if (!MathUtil.AreValuesEqual(MaxY, r.MaxY, epsilon)) + { + return false; + } + + return true; + } + + + public void Clear() + { + MinX = Double.MaxValue; + MaxX = Double.MinValue; + MinY = Double.MaxValue; + MaxY = Double.MinValue; + } + + + public void Set(double xmin, double xmax, double ymin, double ymax) + { + MinX = xmin; + MaxX = xmax; + MinY = ymin; + MaxY = ymax; + Normalize(); + } + + + public void Set(Rect2D b) + { + MinX = b.MinX; + MaxX = b.MaxX; + MinY = b.MinY; + MaxY = b.MaxY; + } + + + public void SetSize(double w, double h) + { + Right = Left + w; + Top = Bottom + h; + } + + + /// + /// Returns whether the coordinate is inside the bounding box. Note that this will return + /// false if the point is ON the edge of the bounding box. If you want to test for whether + /// the point is inside OR on the rect, use ContainsInclusive + /// + public bool Contains(double x, double y) + { + return (x > Left) && (y > Bottom) && (x < Right) && (y < Top); + } + public bool Contains(Point2D p) { return Contains(p.X, p.Y); } + public bool Contains(Rect2D r) + { + return (Left < r.Left) && (Right > r.Right) && (Top < r.Top) && (Bottom > r.Bottom); + } + + + /// + /// Returns whether the coordinate is inside the bounding box. Note that this will return + /// false if the point is ON the edge of the bounding box. If you want to test for whether + /// the point is inside OR on the rect, use ContainsInclusive + /// + public bool ContainsInclusive(double x, double y) + { + return (x >= Left) && (y >= Top) && (x <= Right) && (y <= Bottom); + } + public bool ContainsInclusive(double x, double y, double epsilon) + { + return ((x + epsilon) >= Left) && ((y + epsilon) >= Top) && ((x - epsilon) <= Right) && ((y - epsilon) <= Bottom); + } + public bool ContainsInclusive(Point2D p) { return ContainsInclusive(p.X, p.Y); } + public bool ContainsInclusive(Point2D p, double epsilon) { return ContainsInclusive(p.X, p.Y, epsilon); } + public bool ContainsInclusive(Rect2D r) + { + return (Left <= r.Left) && (Right >= r.Right) && (Top <= r.Top) && (Bottom >= r.Bottom); + } + public bool ContainsInclusive(Rect2D r, double epsilon) + { + return ((Left - epsilon) <= r.Left) && ((Right + epsilon) >= r.Right) && ((Top - epsilon) <= r.Top) && ((Bottom + epsilon) >= r.Bottom); + } + + + public bool Intersects(Rect2D r) + { + return (Right > r.Left) && + (Left < r.Right) && + (Bottom < r.Top) && + (Top > r.Bottom); + } + + + public Point2D GetCenter() + { + Point2D p = new Point2D((Left + Right ) / 2, (Bottom + Top) / 2); + return p; + } + + + public bool IsNormalized() + { + return (Right >= Left) && (Bottom <= Top); + } + + + public void Normalize() + { + if (Left > Right) + { + MathUtil.Swap(ref mMinX, ref mMaxX); + } + + if (Bottom < Top) + { + MathUtil.Swap(ref mMinY, ref mMaxY); + } + } + + + public void AddPoint(Point2D p) + { + MinX = Math.Min(MinX, p.X); + MaxX = Math.Max(MaxX, p.X); + MinY = Math.Min(MinY, p.Y); + MaxY = Math.Max(MaxY, p.Y); + } + + + public void Inflate(double w, double h) + { + Left -= w; + Top += h; + Right += w; + Bottom -= h; + } + + + public void Inflate(double left, double top, double right, double bottom) + { + Left -= left; + Top += top; + Right += right; + Bottom -= bottom; + } + + + public void Offset(double w, double h) + { + Left += w; + Top += h; + Right += w; + Bottom += h; + } + + + public void SetPosition(double x, double y) + { + double w = Right - Left; + double h = Bottom - Top; + Left = x; + Bottom = y; + Right = x + w; + Top = y + h; + } + + + /// Intersection + /// + /// Sets the rectangle to the intersection of two rectangles. + /// Returns true if there is any intersection between the two rectangles. + /// If there is no intersection, the rectangle is set to 0, 0, 0, 0. + /// Either of the input rectangles may be the same as destination rectangle. + /// + public bool Intersection(Rect2D r1, Rect2D r2) + { + if (!TriangulationUtil.RectsIntersect(r1, r2)) + { + Left = Right = Top = Bottom = 0.0; + return false; + } + + Left = (r1.Left > r2.Left) ? r1.Left : r2.Left; + Top = (r1.Top < r2.Top ) ? r1.Top : r2.Top; + Right = (r1.Right < r2.Right) ? r1.Right : r2.Right; + Bottom = (r1.Bottom > r2.Bottom) ? r1.Bottom : r2.Bottom; + + return true; + } + + + /// Union + /// + /// Sets the rectangle to the union of two rectangles r1 and r2. + /// If either rect is empty, it is ignored. If both are empty, the rectangle + /// is set to r1. + /// Either of the input rectangle references may refer to the destination rectangle. + /// + public void Union(Rect2D r1, Rect2D r2) + { + if ((r2.Right == r2.Left) || (r2.Bottom == r2.Top)) + { + Set(r1); + } + else if ((r1.Right == r1.Left) || (r1.Bottom == r1.Top)) + { + Set(r2); + } + else + { + Left = (r1.Left < r2.Left) ? r1.Left : r2.Left; + Top = (r1.Top > r2.Top) ? r1.Top : r2.Top; + Right = (r1.Right > r2.Right) ? r1.Right : r2.Right; + Bottom = (r1.Bottom < r2.Bottom) ? r1.Bottom : r2.Bottom; + } + } + + } +} diff --git a/Assets/Plugins/Poly2Tri/Utility/Rect2D.cs.meta b/Assets/Plugins/Poly2Tri/Utility/Rect2D.cs.meta new file mode 100644 index 0000000..135de95 --- /dev/null +++ b/Assets/Plugins/Poly2Tri/Utility/Rect2D.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d90c83ef75550a34b8be1b39c495defc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/System.Runtime.CompilerServices.Unsafe.dll b/Assets/Plugins/System.Runtime.CompilerServices.Unsafe.dll new file mode 100644 index 0000000..491a80a Binary files /dev/null and b/Assets/Plugins/System.Runtime.CompilerServices.Unsafe.dll differ diff --git a/Assets/Plugins/System.Runtime.CompilerServices.Unsafe.dll.meta b/Assets/Plugins/System.Runtime.CompilerServices.Unsafe.dll.meta new file mode 100644 index 0000000..47e9843 --- /dev/null +++ b/Assets/Plugins/System.Runtime.CompilerServices.Unsafe.dll.meta @@ -0,0 +1,33 @@ +fileFormatVersion: 2 +guid: 2540bb5ba0c13b348bb080ea481e2e31 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/System.Text.Encodings.Web.dll b/Assets/Plugins/System.Text.Encodings.Web.dll new file mode 100644 index 0000000..99c130d Binary files /dev/null and b/Assets/Plugins/System.Text.Encodings.Web.dll differ diff --git a/Assets/Plugins/System.Text.Encodings.Web.dll.meta b/Assets/Plugins/System.Text.Encodings.Web.dll.meta new file mode 100644 index 0000000..800cc43 --- /dev/null +++ b/Assets/Plugins/System.Text.Encodings.Web.dll.meta @@ -0,0 +1,33 @@ +fileFormatVersion: 2 +guid: 67c3024a2e3a0364abd671510394c39b +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/System.Text.Json.dll b/Assets/Plugins/System.Text.Json.dll new file mode 100644 index 0000000..b012517 Binary files /dev/null and b/Assets/Plugins/System.Text.Json.dll differ diff --git a/Assets/Plugins/System.Text.Json.dll.meta b/Assets/Plugins/System.Text.Json.dll.meta new file mode 100644 index 0000000..c4b035e --- /dev/null +++ b/Assets/Plugins/System.Text.Json.dll.meta @@ -0,0 +1,33 @@ +fileFormatVersion: 2 +guid: ff056fff9469e9349bb591e1e4a36267 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/UnsafeIL.dll b/Assets/Plugins/UnsafeIL.dll new file mode 100644 index 0000000..dbb6126 Binary files /dev/null and b/Assets/Plugins/UnsafeIL.dll differ diff --git a/Assets/Plugins/UnsafeIL.dll.meta b/Assets/Plugins/UnsafeIL.dll.meta new file mode 100644 index 0000000..d011987 --- /dev/null +++ b/Assets/Plugins/UnsafeIL.dll.meta @@ -0,0 +1,33 @@ +fileFormatVersion: 2 +guid: 68a5e09ea8c69b944af50b39a8818551 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Windows.meta b/Assets/Plugins/Windows.meta new file mode 100644 index 0000000..6ac42f7 --- /dev/null +++ b/Assets/Plugins/Windows.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: cc0fb8e3306fa3a40915adede477bd83 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Windows/Cryville.Audio.Wasapi.dll b/Assets/Plugins/Windows/Cryville.Audio.Wasapi.dll new file mode 100644 index 0000000..7e00f79 Binary files /dev/null and b/Assets/Plugins/Windows/Cryville.Audio.Wasapi.dll differ diff --git a/Assets/Plugins/Windows/Cryville.Audio.Wasapi.dll.meta b/Assets/Plugins/Windows/Cryville.Audio.Wasapi.dll.meta new file mode 100644 index 0000000..1327498 --- /dev/null +++ b/Assets/Plugins/Windows/Cryville.Audio.Wasapi.dll.meta @@ -0,0 +1,76 @@ +fileFormatVersion: 2 +guid: c84442de51b542e4893ce6be4ca0ee64 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + : Any + second: + enabled: 0 + settings: + Exclude Android: 1 + Exclude Editor: 0 + Exclude Linux64: 1 + Exclude OSXUniversal: 0 + Exclude Win: 0 + Exclude Win64: 0 + - first: + Android: Android + second: + enabled: 0 + settings: + CPU: ARMv7 + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 1 + settings: + CPU: AnyCPU + DefaultValueInitialized: true + OS: Windows + - first: + Standalone: Linux64 + second: + enabled: 0 + settings: + CPU: None + - first: + Standalone: OSXUniversal + second: + enabled: 1 + settings: + CPU: None + - first: + Standalone: Win + second: + enabled: 1 + settings: + CPU: x86 + - first: + Standalone: Win64 + second: + enabled: 1 + settings: + CPU: x86_64 + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Windows/Cryville.Audio.Wasapi.xml b/Assets/Plugins/Windows/Cryville.Audio.Wasapi.xml new file mode 100644 index 0000000..ed8ef7d --- /dev/null +++ b/Assets/Plugins/Windows/Cryville.Audio.Wasapi.xml @@ -0,0 +1,114 @@ + + + + Cryville.Audio.Wasapi + + + + + An that interact with Wasapi. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + An that interact with Wasapi. + + + + + Creates an instance of the class. + + + + + + + + Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. + + Whether the method is being called by user. + + + + + + + + + + An that interacts with Wasapi. + + + + + + + + + + + The properties of the device. + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Assets/Plugins/Windows/Cryville.Audio.Wasapi.xml.meta b/Assets/Plugins/Windows/Cryville.Audio.Wasapi.xml.meta new file mode 100644 index 0000000..5900bd4 --- /dev/null +++ b/Assets/Plugins/Windows/Cryville.Audio.Wasapi.xml.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 0411117244cc54a408659c416f1b5926 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Windows/Cryville.Audio.WaveformAudio.dll b/Assets/Plugins/Windows/Cryville.Audio.WaveformAudio.dll new file mode 100644 index 0000000..6da9e34 Binary files /dev/null and b/Assets/Plugins/Windows/Cryville.Audio.WaveformAudio.dll differ diff --git a/Assets/Plugins/Windows/Cryville.Audio.WaveformAudio.dll.meta b/Assets/Plugins/Windows/Cryville.Audio.WaveformAudio.dll.meta new file mode 100644 index 0000000..3d2ecc2 --- /dev/null +++ b/Assets/Plugins/Windows/Cryville.Audio.WaveformAudio.dll.meta @@ -0,0 +1,76 @@ +fileFormatVersion: 2 +guid: 57be7ee49794257429733809d8163f06 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + : Any + second: + enabled: 0 + settings: + Exclude Android: 1 + Exclude Editor: 0 + Exclude Linux64: 1 + Exclude OSXUniversal: 0 + Exclude Win: 0 + Exclude Win64: 0 + - first: + Android: Android + second: + enabled: 0 + settings: + CPU: ARMv7 + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 1 + settings: + CPU: AnyCPU + DefaultValueInitialized: true + OS: Windows + - first: + Standalone: Linux64 + second: + enabled: 0 + settings: + CPU: None + - first: + Standalone: OSXUniversal + second: + enabled: 1 + settings: + CPU: None + - first: + Standalone: Win + second: + enabled: 1 + settings: + CPU: x86 + - first: + Standalone: Win64 + second: + enabled: 1 + settings: + CPU: x86_64 + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Windows/Cryville.Audio.WaveformAudio.xml b/Assets/Plugins/Windows/Cryville.Audio.WaveformAudio.xml new file mode 100644 index 0000000..1b92aa1 --- /dev/null +++ b/Assets/Plugins/Windows/Cryville.Audio.WaveformAudio.xml @@ -0,0 +1,145 @@ + + + + Cryville.Audio.WaveformAudio + + + + + An that interacts with WinMM. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + An that interacts with WinMM. + + + + + + + + Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. + + Whether the method is being called by user. + + + + The friendly name of the device. + + Due to technical reason, this field is truncated if it has more than 31 characters. + + + + + + + + + + + + + + + + + + + + + + + + + An that interacts with WinMM. + + + + + Creates an instance of the class. + + + + + + + + Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. + + Whether the method is being called by user. + + + + + + + + + + Exception occurring in Multimedia System. + + + + + Creates an instance of the class. + + + + + Creates an instance of the class. + The error message that explains the reason for the exception. + + + + + Creates an instance of the class. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception. + + + + Creates an instance of the class with serialized data. + + The that holds the serialized object data about the exception being thrown. + The that contains contextual information about the source or destination. + + + diff --git a/Assets/Plugins/Windows/Cryville.Audio.WaveformAudio.xml.meta b/Assets/Plugins/Windows/Cryville.Audio.WaveformAudio.xml.meta new file mode 100644 index 0000000..461da89 --- /dev/null +++ b/Assets/Plugins/Windows/Cryville.Audio.WaveformAudio.xml.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 08129585116383f43bdb74d2e2a8906d +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Prefabs.meta b/Assets/Prefabs.meta new file mode 100644 index 0000000..c0a48bb --- /dev/null +++ b/Assets/Prefabs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9bc60ebb68109d24aa446f87dd96d981 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Prefabs/MapElements.meta b/Assets/Prefabs/MapElements.meta new file mode 100644 index 0000000..66cb4a1 --- /dev/null +++ b/Assets/Prefabs/MapElements.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 44d54a133ffc97846adba29d38577a92 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Prefabs/MapElements/Group.prefab b/Assets/Prefabs/MapElements/Group.prefab new file mode 100644 index 0000000..ca00013 --- /dev/null +++ b/Assets/Prefabs/MapElements/Group.prefab @@ -0,0 +1,48 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &542837246753229965 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6188057593599883} + - component: {fileID: 3251824911685425930} + m_Layer: 0 + m_Name: Group + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6188057593599883 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 542837246753229965} + 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_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &3251824911685425930 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 542837246753229965} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 44a27900867d2ef44bb67cb466c445d9, type: 3} + m_Name: + m_EditorClassIdentifier: + m_inheritMaterial: 1 + m_material: {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0} diff --git a/Assets/Prefabs/MapElements/Group.prefab.meta b/Assets/Prefabs/MapElements/Group.prefab.meta new file mode 100644 index 0000000..a80e91a --- /dev/null +++ b/Assets/Prefabs/MapElements/Group.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 93a221313e69cc54ca54d64872e43b87 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Prefabs/MapElements/Hypocenter.prefab b/Assets/Prefabs/MapElements/Hypocenter.prefab new file mode 100644 index 0000000..6f3906d --- /dev/null +++ b/Assets/Prefabs/MapElements/Hypocenter.prefab @@ -0,0 +1,103 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &1847266924018508315 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 175955150020422780} + - component: {fileID: 4504912077119309852} + - component: {fileID: 6523728710437040770} + m_Layer: 0 + m_Name: Hypocenter + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &175955150020422780 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1847266924018508315} + 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_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!212 &4504912077119309852 +SpriteRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1847266924018508315} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 0 + m_RayTraceProcedural: 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_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + 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: 1 + m_Sprite: {fileID: 21300000, guid: d22b834b192bdda4aa4c5b162f0c37d3, type: 3} + m_Color: {r: 1, g: 1, b: 1, a: 0.5019608} + m_FlipX: 0 + m_FlipY: 0 + m_DrawMode: 0 + m_Size: {x: 0.2, y: 0.2} + m_AdaptiveModeThreshold: 0.5 + m_SpriteTileMode: 0 + m_WasSpriteAssigned: 1 + m_MaskInteraction: 0 + m_SpriteSortPoint: 0 +--- !u!114 &6523728710437040770 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1847266924018508315} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 505a49fe5efac9247939cef8282923c4, type: 3} + m_Name: + m_EditorClassIdentifier: + m_inheritMaterial: 1 + m_material: {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0} + m_sprite: {fileID: 21300000, guid: d22b834b192bdda4aa4c5b162f0c37d3, type: 3} + m_spriteLowQuality: {fileID: 21300000, guid: 967ac627d7dbb8f4299eaeb70a8022e3, type: 3} diff --git a/Assets/Prefabs/MapElements/Hypocenter.prefab.meta b/Assets/Prefabs/MapElements/Hypocenter.prefab.meta new file mode 100644 index 0000000..b61d95a --- /dev/null +++ b/Assets/Prefabs/MapElements/Hypocenter.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 56335292a0aa9af4bad613f8f033379c +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Prefabs/MapElements/LabeledPoint.prefab b/Assets/Prefabs/MapElements/LabeledPoint.prefab new file mode 100644 index 0000000..2f78556 --- /dev/null +++ b/Assets/Prefabs/MapElements/LabeledPoint.prefab @@ -0,0 +1,280 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &314817003022633517 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3836035813174775836} + - component: {fileID: 3466321595658153065} + - component: {fileID: 215961244889298507} + m_Layer: 0 + m_Name: LabeledPoint + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3836035813174775836 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 314817003022633517} + 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_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 5835740329156370247} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!212 &3466321595658153065 +SpriteRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 314817003022633517} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 0 + m_RayTraceProcedural: 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_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + 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: 6fd7ea081adb0004a989c2e841e4cf34, 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.28, y: 1.28} + m_AdaptiveModeThreshold: 0.5 + m_SpriteTileMode: 0 + m_WasSpriteAssigned: 1 + m_MaskInteraction: 0 + m_SpriteSortPoint: 0 +--- !u!114 &215961244889298507 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 314817003022633517} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d10b1601f6b7e8946bdf6c54585167af, type: 3} + m_Name: + m_EditorClassIdentifier: + m_inheritMaterial: 1 + m_material: {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0} + m_sprite: {fileID: 21300000, guid: 6fd7ea081adb0004a989c2e841e4cf34, type: 3} + m_spriteArea: {fileID: 21300000, guid: ff05af16f0aa0464fb8ce6255a8bcbde, type: 3} + m_textMesh: {fileID: 8492560861778078080} + m_text: + m_color: {r: 1, g: 1, b: 1, a: 1} + m_textColor: {r: 0, g: 0, b: 0, a: 1} +--- !u!1 &3168339112987716420 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5835740329156370247} + - component: {fileID: 7081374813375499800} + - component: {fileID: 8492560861778078080} + m_Layer: 0 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &5835740329156370247 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3168339112987716420} + 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_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3836035813174775836} + 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.8, y: 0.6} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!23 &7081374813375499800 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3168339112987716420} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!114 &8492560861778078080 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3168339112987716420} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 35fd352f36a42a74e9f2d44b7fc67bdf, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4278190080 + m_fontColor: {r: 0, g: 0, b: 0, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 6 + m_fontSizeBase: 6 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_HorizontalAlignment: 2 + m_VerticalAlignment: 512 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_TextWrappingMode: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 0 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + _SortingLayer: 0 + _SortingLayerID: 0 + _SortingOrder: 0 + m_hasFontAssetChanged: 0 + m_renderer: {fileID: 7081374813375499800} + m_maskType: 0 diff --git a/Assets/Prefabs/MapElements/LabeledPoint.prefab.meta b/Assets/Prefabs/MapElements/LabeledPoint.prefab.meta new file mode 100644 index 0000000..953e142 --- /dev/null +++ b/Assets/Prefabs/MapElements/LabeledPoint.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 9ebc6d06c5a9ced4da5b46b064820f6e +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Prefabs/MapElements/Line.prefab b/Assets/Prefabs/MapElements/Line.prefab new file mode 100644 index 0000000..02dc971 --- /dev/null +++ b/Assets/Prefabs/MapElements/Line.prefab @@ -0,0 +1,102 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &5082940409015333163 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2215364262778790074} + - component: {fileID: 3394850924262665953} + - component: {fileID: 9151584412358437989} + - component: {fileID: 6926424183360792320} + m_Layer: 0 + m_Name: Line + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2215364262778790074 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5082940409015333163} + 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_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &3394850924262665953 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5082940409015333163} + m_Mesh: {fileID: 0} +--- !u!23 &9151584412358437989 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5082940409015333163} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 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_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!114 &6926424183360792320 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5082940409015333163} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 073fe1bdd0645d64eb82329cb69e89fb, type: 3} + m_Name: + m_EditorClassIdentifier: + m_color: {r: 1, g: 1, b: 1, a: 1} + m_width: 1 + m_flatCornerThreshold: 0.99999 + m_sharpCornerThreshold: 0.866 diff --git a/Assets/Prefabs/MapElements/Line.prefab.meta b/Assets/Prefabs/MapElements/Line.prefab.meta new file mode 100644 index 0000000..9f25365 --- /dev/null +++ b/Assets/Prefabs/MapElements/Line.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 327cdc352069712459730947d8bd37d0 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Prefabs/MapElements/MaskedGroup.prefab b/Assets/Prefabs/MapElements/MaskedGroup.prefab new file mode 100644 index 0000000..704d22b --- /dev/null +++ b/Assets/Prefabs/MapElements/MaskedGroup.prefab @@ -0,0 +1,50 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &776590124227455829 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 962212323479777363} + - component: {fileID: 5853702018268975928} + m_Layer: 0 + m_Name: MaskedGroup + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &962212323479777363 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 776590124227455829} + 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_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &5853702018268975928 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 776590124227455829} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: e597c4b1800db0e47bb84271bcd9de7b, type: 3} + m_Name: + m_EditorClassIdentifier: + m_defaultMaterial: {fileID: 0} + m_material: {fileID: 2100000, guid: 0ac8d21fd27824647ad7bbb7b7e5d3f2, type: 2} + m_maskMaterial: {fileID: 2100000, guid: 920545efa6cc39945b5ccd0bcd6d47e7, type: 2} + m_polygonRendererPrefab: {fileID: 8358693768617547296, guid: 3eb45eef0f3bb9a4eaa43a88d62cdf02, type: 3} diff --git a/Assets/Prefabs/MapElements/MaskedGroup.prefab.meta b/Assets/Prefabs/MapElements/MaskedGroup.prefab.meta new file mode 100644 index 0000000..5b92c6e --- /dev/null +++ b/Assets/Prefabs/MapElements/MaskedGroup.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: a2669193cdb0cb248998879dd180a85e +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Prefabs/MapElements/MultiLine.prefab b/Assets/Prefabs/MapElements/MultiLine.prefab new file mode 100644 index 0000000..9cc1c5c --- /dev/null +++ b/Assets/Prefabs/MapElements/MultiLine.prefab @@ -0,0 +1,51 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &4307030626239767329 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5134836244134476336} + - component: {fileID: 8663554297803987547} + m_Layer: 0 + m_Name: MultiLine + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5134836244134476336 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4307030626239767329} + 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_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &8663554297803987547 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4307030626239767329} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9028f83972f4b8648819141884011f70, type: 3} + m_Name: + m_EditorClassIdentifier: + m_inheritMaterial: 1 + m_material: {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0} + m_lineRendererPrefab: {fileID: 6926424183360792320, guid: 327cdc352069712459730947d8bd37d0, type: 3} + m_color: {r: 1, g: 1, b: 1, a: 1} + m_width: 1 diff --git a/Assets/Prefabs/MapElements/MultiLine.prefab.meta b/Assets/Prefabs/MapElements/MultiLine.prefab.meta new file mode 100644 index 0000000..2c26888 --- /dev/null +++ b/Assets/Prefabs/MapElements/MultiLine.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 0e2f332f291cf374ca6888465df91fb2 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Prefabs/MapElements/MultiPolygon.prefab b/Assets/Prefabs/MapElements/MultiPolygon.prefab new file mode 100644 index 0000000..077c546 --- /dev/null +++ b/Assets/Prefabs/MapElements/MultiPolygon.prefab @@ -0,0 +1,53 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &7809778603652558898 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1217897763329042723} + - component: {fileID: -885788347912338764} + m_Layer: 0 + m_Name: MultiPolygon + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1217897763329042723 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7809778603652558898} + 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_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &-885788347912338764 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7809778603652558898} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ccf7f796ffe73004a95fef5655177c3b, type: 3} + m_Name: + m_EditorClassIdentifier: + m_inheritMaterial: 1 + m_material: {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0} + m_polygonRendererPrefab: {fileID: 8358693768617547296, guid: 3eb45eef0f3bb9a4eaa43a88d62cdf02, type: 3} + m_lineRendererPrefab: {fileID: 6926424183360792320, guid: 327cdc352069712459730947d8bd37d0, type: 3} + m_fillColor: {r: 1, g: 1, b: 1, a: 1} + m_borderColor: {r: 1, g: 1, b: 1, a: 1} + m_borderWidth: 1 diff --git a/Assets/Prefabs/MapElements/MultiPolygon.prefab.meta b/Assets/Prefabs/MapElements/MultiPolygon.prefab.meta new file mode 100644 index 0000000..2b5f104 --- /dev/null +++ b/Assets/Prefabs/MapElements/MultiPolygon.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 1d3c21552432c374c8fca236230fc58b +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Prefabs/MapElements/OngoingGroup.prefab b/Assets/Prefabs/MapElements/OngoingGroup.prefab new file mode 100644 index 0000000..2bd0946 --- /dev/null +++ b/Assets/Prefabs/MapElements/OngoingGroup.prefab @@ -0,0 +1,48 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &2986269163827669445 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 9154308276296634964} + - component: {fileID: 1015977942096609801} + m_Layer: 0 + m_Name: OngoingGroup + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &9154308276296634964 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2986269163827669445} + 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_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1015977942096609801 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2986269163827669445} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: af28bd1e6223c4e498888034b7b756ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_inheritMaterial: 1 + m_material: {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0} diff --git a/Assets/Prefabs/MapElements/OngoingGroup.prefab.meta b/Assets/Prefabs/MapElements/OngoingGroup.prefab.meta new file mode 100644 index 0000000..1f8095c --- /dev/null +++ b/Assets/Prefabs/MapElements/OngoingGroup.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 6ce05688e256123478c2ca8329d68cd5 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Prefabs/MapElements/Point.prefab b/Assets/Prefabs/MapElements/Point.prefab new file mode 100644 index 0000000..10a1ffd --- /dev/null +++ b/Assets/Prefabs/MapElements/Point.prefab @@ -0,0 +1,275 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &184933130346846969 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8761057050648440570} + - component: {fileID: 5417593746151227301} + - component: {fileID: 6679562870913980477} + m_Layer: 0 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &8761057050648440570 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 184933130346846969} + 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_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2041650355143975329} + 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.8, y: 0.6} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!23 &5417593746151227301 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 184933130346846969} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: -3021868053195457599, guid: 2b12354fb2d86744887c3e4bfee63986, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!114 &6679562870913980477 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 184933130346846969} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 35fd352f36a42a74e9f2d44b7fc67bdf, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 2b12354fb2d86744887c3e4bfee63986, type: 2} + m_sharedMaterial: {fileID: -3021868053195457599, guid: 2b12354fb2d86744887c3e4bfee63986, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4278190080 + m_fontColor: {r: 0, g: 0, b: 0, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 6 + m_fontSizeBase: 6 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_HorizontalAlignment: 2 + m_VerticalAlignment: 512 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_TextWrappingMode: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 0 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + _SortingLayer: 0 + _SortingLayerID: 0 + _SortingOrder: 0 + m_hasFontAssetChanged: 0 + m_renderer: {fileID: 5417593746151227301} + m_maskType: 0 +--- !u!1 &3258148121682082704 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2041650355143975329} + - component: {fileID: 1834065869972807124} + - component: {fileID: 2146741774911736149} + m_Layer: 0 + m_Name: Point + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2041650355143975329 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3258148121682082704} + 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_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 8761057050648440570} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!212 &1834065869972807124 +SpriteRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3258148121682082704} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 0 + m_RayTraceProcedural: 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_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + 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: 9073ff3c2a4d9a34b8ad0e21c02b50df, 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.28, y: 1.28} + m_AdaptiveModeThreshold: 0.5 + m_SpriteTileMode: 0 + m_WasSpriteAssigned: 1 + m_MaskInteraction: 0 + m_SpriteSortPoint: 0 +--- !u!114 &2146741774911736149 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3258148121682082704} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: cccfefde2dac1e742a8c44924b678e12, type: 3} + m_Name: + m_EditorClassIdentifier: + m_inheritMaterial: 1 + m_material: {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0} + m_color: {r: 1, g: 1, b: 1, a: 1} diff --git a/Assets/Prefabs/MapElements/Point.prefab.meta b/Assets/Prefabs/MapElements/Point.prefab.meta new file mode 100644 index 0000000..6aae6b7 --- /dev/null +++ b/Assets/Prefabs/MapElements/Point.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: fc4b6950e0f83a241b56aba1be3ef8c4 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Prefabs/MapElements/Polygon.prefab b/Assets/Prefabs/MapElements/Polygon.prefab new file mode 100644 index 0000000..544e216 --- /dev/null +++ b/Assets/Prefabs/MapElements/Polygon.prefab @@ -0,0 +1,99 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &4823303952510096579 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8906705066649169187} + - component: {fileID: 4364850677217933261} + - component: {fileID: 958282156557436596} + - component: {fileID: 8358693768617547296} + m_Layer: 0 + m_Name: Polygon + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8906705066649169187 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4823303952510096579} + 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_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &4364850677217933261 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4823303952510096579} + m_Mesh: {fileID: 0} +--- !u!23 &958282156557436596 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4823303952510096579} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 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_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!114 &8358693768617547296 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4823303952510096579} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: cd4f627f0b43de845b20ffb1d668f14c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_color: {r: 1, g: 1, b: 1, a: 1} diff --git a/Assets/Prefabs/MapElements/Polygon.prefab.meta b/Assets/Prefabs/MapElements/Polygon.prefab.meta new file mode 100644 index 0000000..97c71de --- /dev/null +++ b/Assets/Prefabs/MapElements/Polygon.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 3eb45eef0f3bb9a4eaa43a88d62cdf02 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Prefabs/MapElements/TsunamiHeight.prefab b/Assets/Prefabs/MapElements/TsunamiHeight.prefab new file mode 100644 index 0000000..0f56e88 --- /dev/null +++ b/Assets/Prefabs/MapElements/TsunamiHeight.prefab @@ -0,0 +1,393 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &3452696182703288983 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7203860781016170789} + - component: {fileID: 1425179677453942136} + m_Layer: 0 + m_Name: Missing + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &7203860781016170789 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3452696182703288983} + 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_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 8456673658325140949} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!212 &1425179677453942136 +SpriteRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3452696182703288983} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 0 + m_RayTraceProcedural: 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_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + 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: 46ef28d7c012baf41afa40c15a9631da, type: 3} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_FlipX: 0 + m_FlipY: 0 + m_DrawMode: 0 + m_Size: {x: 0.96, y: 0.32} + m_AdaptiveModeThreshold: 0.5 + m_SpriteTileMode: 0 + m_WasSpriteAssigned: 1 + m_MaskInteraction: 0 + m_SpriteSortPoint: 0 +--- !u!1 &5323908509080976606 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6084329966739182297} + - component: {fileID: 30783885894702232} + m_Layer: 0 + m_Name: Out Of Range + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &6084329966739182297 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5323908509080976606} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0.48, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 8456673658325140949} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!212 &30783885894702232 +SpriteRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5323908509080976606} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 0 + m_RayTraceProcedural: 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_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + 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: 46ef28d7c012baf41afa40c15a9631da, type: 3} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_FlipX: 0 + m_FlipY: 0 + m_DrawMode: 0 + m_Size: {x: 0.96, y: 0.32} + m_AdaptiveModeThreshold: 0.5 + m_SpriteTileMode: 0 + m_WasSpriteAssigned: 1 + m_MaskInteraction: 0 + m_SpriteSortPoint: 0 +--- !u!1 &7855756231611662760 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8432304716279579323} + - component: {fileID: 6085779811635513433} + m_Layer: 0 + m_Name: Rising + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &8432304716279579323 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7855756231611662760} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0.6, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 8456673658325140949} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!212 &6085779811635513433 +SpriteRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7855756231611662760} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 0 + m_RayTraceProcedural: 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_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + 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: dbcbff0efe9cbc64a99c43795615a2f2, type: 3} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_FlipX: 0 + m_FlipY: 0 + m_DrawMode: 0 + m_Size: {x: 0.96, y: 0.56} + m_AdaptiveModeThreshold: 0.5 + m_SpriteTileMode: 0 + m_WasSpriteAssigned: 1 + m_MaskInteraction: 0 + m_SpriteSortPoint: 0 +--- !u!1 &8456673658325140946 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8456673658325140949} + - component: {fileID: 8456673658325140948} + m_Layer: 0 + m_Name: TsunamiHeight + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8456673658325140949 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8456673658325140946} + 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_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 8456673659549029840} + - {fileID: 8432304716279579323} + - {fileID: 6084329966739182297} + - {fileID: 7203860781016170789} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &8456673658325140948 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8456673658325140946} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 00fc5cd64f19b374aba03a10b1fc3d43, type: 3} + m_Name: + m_EditorClassIdentifier: + m_inheritMaterial: 1 + m_material: {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0} + _barRenderer: {fileID: 8456673659549029843} + _risingMark: {fileID: 6085779811635513433} + _outOfRangeMark: {fileID: 30783885894702232} + _missingMark: {fileID: 1425179677453942136} + m_color: {r: 1, g: 1, b: 1, a: 1} +--- !u!1 &8456673659549029841 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8456673659549029840} + - component: {fileID: 8456673659549029843} + m_Layer: 0 + m_Name: Bar + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8456673659549029840 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8456673659549029841} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: -0.32, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 8456673658325140949} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!212 &8456673659549029843 +SpriteRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8456673659549029841} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 0 + m_RayTraceProcedural: 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_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + 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: 0194dab6ea5df9e43b1daaf750815c4e, type: 3} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_FlipX: 0 + m_FlipY: 0 + m_DrawMode: 1 + m_Size: {x: 0.64, y: 0.64} + m_AdaptiveModeThreshold: 0.5 + m_SpriteTileMode: 0 + m_WasSpriteAssigned: 1 + m_MaskInteraction: 0 + m_SpriteSortPoint: 0 diff --git a/Assets/Prefabs/MapElements/TsunamiHeight.prefab.meta b/Assets/Prefabs/MapElements/TsunamiHeight.prefab.meta new file mode 100644 index 0000000..a4bc851 --- /dev/null +++ b/Assets/Prefabs/MapElements/TsunamiHeight.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 07cc8e8fd5cdbdd418d0338a61b14693 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Prefabs/MapElements/WaveCircle.prefab b/Assets/Prefabs/MapElements/WaveCircle.prefab new file mode 100644 index 0000000..5508571 --- /dev/null +++ b/Assets/Prefabs/MapElements/WaveCircle.prefab @@ -0,0 +1,146 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &4076127282570837797 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5237951306988796591} + - component: {fileID: 684034762703354723} + m_Layer: 0 + m_Name: S + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5237951306988796591 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4076127282570837797} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -0.0001} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2540683967644935713} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &684034762703354723 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4076127282570837797} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3c4b9fd0d7969a94bae8539e2db32009, type: 3} + m_Name: + m_EditorClassIdentifier: + m_lineRendererPrefab: {fileID: 4055492119289268606, guid: 2c5ceb9061f771e49a0562494aa6e79f, type: 3} + m_width: 1 +--- !u!1 &7396419818498030156 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2540683967644935713} + - component: {fileID: 5660376597462042753} + m_Layer: 0 + m_Name: WaveCircle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2540683967644935713 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7396419818498030156} + 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_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 2731930753630165469} + - {fileID: 5237951306988796591} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &5660376597462042753 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7396419818498030156} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c59bd9617c7906543b3b23f07518b4e1, type: 3} + m_Name: + m_EditorClassIdentifier: + m_inheritMaterial: 1 + m_material: {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0} + m_lineRendererP: {fileID: 6097275721637586426} + m_lineRendererS: {fileID: 684034762703354723} + m_ongoingMaterial: {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0} + m_historyMaterial: {fileID: 2100000, guid: 042ab51a88dcec14c862d721d502c44b, type: 2} +--- !u!1 &9069530413894420556 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2731930753630165469} + - component: {fileID: 6097275721637586426} + m_Layer: 0 + m_Name: P + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2731930753630165469 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9069530413894420556} + 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_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2540683967644935713} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &6097275721637586426 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9069530413894420556} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3c4b9fd0d7969a94bae8539e2db32009, type: 3} + m_Name: + m_EditorClassIdentifier: + m_lineRendererPrefab: {fileID: 6926424183360792320, guid: ab659013f555b7d499d0dbfc1cfe3c9d, type: 3} + m_width: 1 diff --git a/Assets/Prefabs/MapElements/WaveCircle.prefab.meta b/Assets/Prefabs/MapElements/WaveCircle.prefab.meta new file mode 100644 index 0000000..65972b2 --- /dev/null +++ b/Assets/Prefabs/MapElements/WaveCircle.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 83ac8144d34b1384c8e488baf808045d +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Prefabs/MapElements/WaveCircleP.prefab b/Assets/Prefabs/MapElements/WaveCircleP.prefab new file mode 100644 index 0000000..b88294f --- /dev/null +++ b/Assets/Prefabs/MapElements/WaveCircleP.prefab @@ -0,0 +1,103 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &5082940409015333163 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2215364262778790074} + - component: {fileID: 3394850924262665953} + - component: {fileID: 9151584412358437989} + - component: {fileID: 6926424183360792320} + m_Layer: 0 + m_Name: WaveCircleP + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2215364262778790074 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5082940409015333163} + 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_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &3394850924262665953 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5082940409015333163} + m_Mesh: {fileID: 0} +--- !u!23 &9151584412358437989 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5082940409015333163} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 042ab51a88dcec14c862d721d502c44b, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!114 &6926424183360792320 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5082940409015333163} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 073fe1bdd0645d64eb82329cb69e89fb, type: 3} + m_Name: + m_EditorClassIdentifier: + m_color: {r: 0, g: 0, b: 1, a: 1} + m_width: 1 + m_flatCornerThreshold: 0.99999 + m_sharpCornerThreshold: 0.5 + m_tilingScale: 8 diff --git a/Assets/Prefabs/MapElements/WaveCircleP.prefab.meta b/Assets/Prefabs/MapElements/WaveCircleP.prefab.meta new file mode 100644 index 0000000..c9f6330 --- /dev/null +++ b/Assets/Prefabs/MapElements/WaveCircleP.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: ab659013f555b7d499d0dbfc1cfe3c9d +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Prefabs/MapElements/WaveCircleS.prefab b/Assets/Prefabs/MapElements/WaveCircleS.prefab new file mode 100644 index 0000000..7719ead --- /dev/null +++ b/Assets/Prefabs/MapElements/WaveCircleS.prefab @@ -0,0 +1,103 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &6400953039892363463 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8853804595359668012} + - component: {fileID: 5056419881734837199} + - component: {fileID: 7033607135291149510} + - component: {fileID: 4055492119289268606} + m_Layer: 0 + m_Name: WaveCircleS + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8853804595359668012 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6400953039892363463} + 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_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &5056419881734837199 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6400953039892363463} + m_Mesh: {fileID: 0} +--- !u!23 &7033607135291149510 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6400953039892363463} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 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_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!114 &4055492119289268606 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6400953039892363463} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 073fe1bdd0645d64eb82329cb69e89fb, type: 3} + m_Name: + m_EditorClassIdentifier: + m_color: {r: 1, g: 0, b: 0, a: 1} + m_width: 1 + m_flatCornerThreshold: 0.99999 + m_sharpCornerThreshold: 0.5 + m_tilingScale: 8 diff --git a/Assets/Prefabs/MapElements/WaveCircleS.prefab.meta b/Assets/Prefabs/MapElements/WaveCircleS.prefab.meta new file mode 100644 index 0000000..62f7646 --- /dev/null +++ b/Assets/Prefabs/MapElements/WaveCircleS.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 2c5ceb9061f771e49a0562494aa6e79f +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Prefabs/Tile.prefab b/Assets/Prefabs/Tile.prefab new file mode 100644 index 0000000..d11cb99 --- /dev/null +++ b/Assets/Prefabs/Tile.prefab @@ -0,0 +1,99 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &7683017549812261837 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7683017549812261838} + - component: {fileID: 7683017549812261832} + - component: {fileID: 3920659423852445223} + m_Layer: 0 + m_Name: Tile + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7683017549812261838 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7683017549812261837} + 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_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!212 &7683017549812261832 +SpriteRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7683017549812261837} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 0 + m_RayTraceProcedural: 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_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + 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: 672c776247ebf734a8e575a63278a292, type: 3} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_FlipX: 0 + m_FlipY: 0 + m_DrawMode: 0 + m_Size: {x: 0.04, y: 0.04} + m_AdaptiveModeThreshold: 0.5 + m_SpriteTileMode: 0 + m_WasSpriteAssigned: 0 + m_MaskInteraction: 0 + m_SpriteSortPoint: 0 +--- !u!114 &3920659423852445223 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7683017549812261837} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 772f71bcdaaa2504d9e9a469c3100593, type: 3} + m_Name: + m_EditorClassIdentifier: diff --git a/Assets/Prefabs/Tile.prefab.meta b/Assets/Prefabs/Tile.prefab.meta new file mode 100644 index 0000000..87a7f44 --- /dev/null +++ b/Assets/Prefabs/Tile.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: e090edd328c6750478f5849a43a9d278 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Prefabs/UI.meta b/Assets/Prefabs/UI.meta new file mode 100644 index 0000000..f81992b --- /dev/null +++ b/Assets/Prefabs/UI.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 736761d0921d560468160cc739c34fa9 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Prefabs/UI/Event Group.prefab b/Assets/Prefabs/UI/Event Group.prefab new file mode 100644 index 0000000..445a876 --- /dev/null +++ b/Assets/Prefabs/UI/Event Group.prefab @@ -0,0 +1,1974 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &5384127835480380548 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8679172922107940774} + - component: {fileID: 2253148421994623066} + - component: {fileID: 7598623578409771931} + m_Layer: 5 + m_Name: Expander Image + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &8679172922107940774 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5384127835480380548} + 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_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 8912050087328653367} + 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: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &2253148421994623066 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5384127835480380548} + m_CullTransparentMesh: 1 +--- !u!114 &7598623578409771931 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5384127835480380548} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: f6ffd2153d294b246b3a2bf1fdbba009, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!1 &5722722314339243713 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 219718066529163937} + - component: {fileID: 9176792889927899612} + m_Layer: 5 + m_Name: Sentence + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &219718066529163937 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5722722314339243713} + 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_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 5834406091014907362} + - {fileID: 7644034394791790906} + m_Father: {fileID: 5834406091484752082} + 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: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &9176792889927899612 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5722722314339243713} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1ce1debad67438245a6e00e503975beb, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_ChildAlignment: 0 + m_spacing: {x: 4, y: 0} + m_itemAlignmentRatio: 0.75 + m_itemAlignmentStretchingRatio: 0 +--- !u!1 &5834406091014907363 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5834406091014907362} + - component: {fileID: 5834406091014907360} + - component: {fileID: 5834406091014907361} + - component: {fileID: 3377665050230390713} + m_Layer: 5 + m_Name: Location + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &5834406091014907362 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5834406091014907363} + 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_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 219718066529163937} + 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: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &5834406091014907360 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5834406091014907363} + m_CullTransparentMesh: 1 +--- !u!114 &5834406091014907361 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5834406091014907363} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83e7715acbfae1d4b84414c13d03ed3f, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: Location + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 2b12354fb2d86744887c3e4bfee63986, type: 2} + m_sharedMaterial: {fileID: -3021868053195457599, guid: 2b12354fb2d86744887c3e4bfee63986, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4294967295 + m_fontColor: {r: 1, g: 1, b: 1, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 22 + m_fontSizeBase: 22 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_HorizontalAlignment: 1 + m_VerticalAlignment: 256 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_TextWrappingMode: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!114 &3377665050230390713 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5834406091014907363} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c03870a7d4386e846be005a0ac36e987, type: 3} + m_Name: + m_EditorClassIdentifier: + m_shader: {fileID: 0} +--- !u!1 &5834406091195202554 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5834406091195202553} + - component: {fileID: 2749699927677379789} + - component: {fileID: 1927006246221332959} + m_Layer: 5 + m_Name: Properties + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &5834406091195202553 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5834406091195202554} + 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_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5834406091484752082} + 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.5, y: 0.5} +--- !u!114 &2749699927677379789 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5834406091195202554} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1ce1debad67438245a6e00e503975beb, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_ChildAlignment: 0 + m_spacing: {x: 16, y: 0} + m_itemAlignmentRatio: 0 + m_itemAlignmentStretchingRatio: 0 +--- !u!114 &1927006246221332959 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5834406091195202554} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 22019c55ede3c4245b1934a9a2d4a06b, type: 3} + m_Name: + m_EditorClassIdentifier: + m_prefabEventPropertyView: {fileID: -3940543153975910597, guid: b19e4e6833de5764e9d131bcc9efb4c1, type: 3} +--- !u!1 &5834406091256718624 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5834406091256718655} + - component: {fileID: 5834406091256718652} + - component: {fileID: 5834406091256718653} + - component: {fileID: 5834406091256718654} + - component: {fileID: 5834406091256718651} + m_Layer: 5 + m_Name: _content + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &5834406091256718655 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5834406091256718624} + 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_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 5834406092755917685} + - {fileID: 5834406091484752082} + m_Father: {fileID: 5834406091441962553} + 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: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &5834406091256718652 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5834406091256718624} + m_CullTransparentMesh: 1 +--- !u!114 &5834406091256718653 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5834406091256718624} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 0.011764706} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 5867898c2e0a7f14c8a8e96f2856e8f0, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &5834406091256718654 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5834406091256718624} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 31a19414c41e5ae4aae2af33fee712f6, type: 3} + m_Name: + m_EditorClassIdentifier: + m_ShowMaskGraphic: 0 +--- !u!114 &5834406091256718651 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5834406091256718624} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0bbf3330df0a07e46bcdf0b3c4879ecf, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_ChildAlignment: 0 + m_side: 3 + m_slideIndex: 0 + m_dockOccupiedRatio: 0.2857143 +--- !u!1 &5834406091272192539 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5834406091272192538} + - component: {fileID: 5834406091272192537} + - component: {fileID: 8129916294915202617} + m_Layer: 5 + m_Name: _content + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &5834406091272192538 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5834406091272192539} + 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_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5834406091855906047} + 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.5, y: 0.5} +--- !u!114 &5834406091272192537 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5834406091272192539} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_ChildAlignment: 0 + m_Spacing: 6 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 + m_ChildScaleWidth: 0 + m_ChildScaleHeight: 1 + m_ReverseArrangement: 0 +--- !u!114 &8129916294915202617 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5834406091272192539} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 47104cf79f65bc9479d1ee4c994c7596, type: 3} + m_Name: + m_EditorClassIdentifier: + m_prefabEventUnitView: {fileID: 9023894030933360738, guid: a8c99ee4bb8f6314d8a9f430b4bcd0a0, type: 3} +--- !u!1 &5834406091441962554 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5834406091441962553} + - component: {fileID: 5834406091441962551} + - component: {fileID: 5834406091441962552} + - component: {fileID: 5834406091441962550} + - component: {fileID: 1850128201037658532} + m_Layer: 5 + m_Name: Event Group Header + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &5834406091441962553 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5834406091441962554} + 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_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 5834406091256718655} + m_Father: {fileID: 5834406092508179349} + 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: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &5834406091441962551 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5834406091441962554} + m_CullTransparentMesh: 1 +--- !u!114 &5834406091441962552 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5834406091441962554} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: caade3ded4573b540a946c53bd789b37, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &5834406091441962550 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5834406091441962554} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 21255a16576b76f4280a765b43a4ae1c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_ChildAlignment: 0 + m_ChildForceExpandWidth: 0 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 + m_ChildScaleWidth: 0 + m_ChildScaleHeight: 0 +--- !u!114 &1850128201037658532 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5834406091441962554} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + 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_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, 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_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 5834406091441962552} + m_OnClick: + m_PersistentCalls: + m_Calls: [] +--- !u!1 &5834406091484752083 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5834406091484752082} + - component: {fileID: 5834406091484752111} + - component: {fileID: 5834406091484752080} + - component: {fileID: 5834406091484752081} + m_Layer: 5 + m_Name: Summary + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &5834406091484752082 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5834406091484752083} + 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_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 219718066529163937} + - {fileID: 5834406091943899974} + - {fileID: 5834406091195202553} + m_Father: {fileID: 5834406091256718655} + 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.5, y: 0.5} +--- !u!222 &5834406091484752111 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5834406091484752083} + m_CullTransparentMesh: 1 +--- !u!114 &5834406091484752080 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5834406091484752083} + m_Enabled: 0 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &5834406091484752081 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5834406091484752083} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 4 + m_Right: 8 + m_Top: 4 + m_Bottom: 4 + m_ChildAlignment: 3 + m_Spacing: 0 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 + m_ChildScaleWidth: 0 + m_ChildScaleHeight: 0 + m_ReverseArrangement: 0 +--- !u!1 &5834406091519064140 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5834406091519064139} + - component: {fileID: 5834406091519064136} + - component: {fileID: 5834406091519064137} + - component: {fileID: 5834406091519064138} + m_Layer: 5 + m_Name: Rail + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &5834406091519064139 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5834406091519064140} + 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_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5834406091855906047} + 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: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &5834406091519064136 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5834406091519064140} + m_CullTransparentMesh: 1 +--- !u!114 &5834406091519064137 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5834406091519064140} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &5834406091519064138 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5834406091519064140} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 0 + m_MinWidth: 4 + m_MinHeight: -1 + m_PreferredWidth: 4 + m_PreferredHeight: -1 + m_FlexibleWidth: -1 + m_FlexibleHeight: -1 + m_LayoutPriority: 1 +--- !u!1 &5834406091655591274 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5834406091655591273} + - component: {fileID: 5834406091655591271} + - component: {fileID: 5834406091655591272} + - component: {fileID: 2471572682003598253} + m_Layer: 5 + m_Name: Title + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &5834406091655591273 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5834406091655591274} + 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_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5834406092755917685} + 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: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &5834406091655591271 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5834406091655591274} + m_CullTransparentMesh: 1 +--- !u!114 &5834406091655591272 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5834406091655591274} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83e7715acbfae1d4b84414c13d03ed3f, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: Key + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 2b12354fb2d86744887c3e4bfee63986, type: 2} + m_sharedMaterial: {fileID: -3021868053195457599, guid: 2b12354fb2d86744887c3e4bfee63986, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4278190080 + m_fontColor: {r: 0, g: 0, b: 0, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 12 + m_fontSizeBase: 12 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_HorizontalAlignment: 2 + m_VerticalAlignment: 256 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_TextWrappingMode: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!114 &2471572682003598253 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5834406091655591274} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c03870a7d4386e846be005a0ac36e987, type: 3} + m_Name: + m_EditorClassIdentifier: + m_shader: {fileID: 0} +--- !u!1 &5834406091855906016 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5834406091855906047} + - component: {fileID: 5834406091855906046} + m_Layer: 5 + m_Name: Event Unit List + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &5834406091855906047 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5834406091855906016} + 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_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 5834406091519064139} + - {fileID: 5834406091272192538} + m_Father: {fileID: 5834406092508179349} + 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.5, y: 0.5} +--- !u!114 &5834406091855906046 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5834406091855906016} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 30649d3a9faa99c48a7b1166b86bf2a0, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_ChildAlignment: 0 + m_Spacing: 6 + m_ChildForceExpandWidth: 0 + m_ChildForceExpandHeight: 1 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 + m_ChildScaleWidth: 0 + m_ChildScaleHeight: 0 + m_ReverseArrangement: 0 +--- !u!1 &5834406091943899975 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5834406091943899974} + - component: {fileID: 5834406091943899972} + - component: {fileID: 5834406091943899973} + - component: {fileID: 4362377661074236031} + m_Layer: 5 + m_Name: Time + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &5834406091943899974 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5834406091943899975} + 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_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5834406091484752082} + 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.5, y: 0.5} +--- !u!222 &5834406091943899972 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5834406091943899975} + m_CullTransparentMesh: 1 +--- !u!114 &5834406091943899973 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5834406091943899975} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83e7715acbfae1d4b84414c13d03ed3f, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: 2000-01-01 00:00:00 (UTC+00:00) + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 2b12354fb2d86744887c3e4bfee63986, type: 2} + m_sharedMaterial: {fileID: -3021868053195457599, guid: 2b12354fb2d86744887c3e4bfee63986, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4294967295 + m_fontColor: {r: 1, g: 1, b: 1, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 12 + m_fontSizeBase: 12 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_HorizontalAlignment: 1 + m_VerticalAlignment: 256 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_TextWrappingMode: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!114 &4362377661074236031 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5834406091943899975} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c03870a7d4386e846be005a0ac36e987, type: 3} + m_Name: + m_EditorClassIdentifier: + m_shader: {fileID: 0} +--- !u!1 &5834406092508179350 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5834406092508179349} + - component: {fileID: 5834406092508179348} + - component: {fileID: 1040273476696300640} + m_Layer: 5 + m_Name: Event Group + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &5834406092508179349 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5834406092508179350} + 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_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 5834406091441962553} + - {fileID: 8912050087328653367} + - {fileID: 5834406091855906047} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 320, y: 160} + m_Pivot: {x: 0, y: 1} +--- !u!114 &5834406092508179348 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5834406092508179350} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_ChildAlignment: 0 + m_Spacing: 6 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 + m_ChildScaleWidth: 0 + m_ChildScaleHeight: 0 + m_ReverseArrangement: 0 +--- !u!114 &1040273476696300640 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5834406092508179350} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2e6468ba458d7f44c84b64a0a12dd06f, type: 3} + m_Name: + m_EditorClassIdentifier: + m_reportView: + - {fileID: 5834406091441962552} + - {fileID: 5834406091519064137} + - {fileID: 7598623578409771931} + m_keyView: {fileID: 5834406092755917683} + m_keyTitleView: {fileID: 2471572682003598253} + m_keyValueView: {fileID: 3616977570084737508} + m_keyConditionView: {fileID: 9020149657235358073} + m_locationView: {fileID: 3377665050230390713} + m_predicateView: {fileID: 3056363139123556364} + m_timeView: {fileID: 4362377661074236031} + m_propertyListView: {fileID: 1927006246221332959} + m_listView: {fileID: 8129916294915202617} + m_groupHeader: {fileID: 1850128201037658532} + m_listViewContainer: {fileID: 5834406091855906016} + m_listViewRail: {fileID: 5834406091519064140} + m_expander: {fileID: 6355108258070867553} +--- !u!1 &5834406092510226394 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5834406092510226393} + - component: {fileID: 5834406092510226391} + - component: {fileID: 5834406092510226392} + - component: {fileID: 3616977570084737508} + m_Layer: 5 + m_Name: Value + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &5834406092510226393 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5834406092510226394} + 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_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5834406092755917685} + 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.5, y: 0.5} +--- !u!222 &5834406092510226391 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5834406092510226394} + m_CullTransparentMesh: 1 +--- !u!114 &5834406092510226392 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5834406092510226394} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83e7715acbfae1d4b84414c13d03ed3f, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: 1.0 + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 2b12354fb2d86744887c3e4bfee63986, type: 2} + m_sharedMaterial: {fileID: -3021868053195457599, guid: 2b12354fb2d86744887c3e4bfee63986, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4278190080 + m_fontColor: {r: 0, g: 0, b: 0, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 20 + m_fontSizeBase: 20 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_HorizontalAlignment: 2 + m_VerticalAlignment: 256 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_TextWrappingMode: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!114 &3616977570084737508 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5834406092510226394} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c03870a7d4386e846be005a0ac36e987, type: 3} + m_Name: + m_EditorClassIdentifier: + m_shader: {fileID: 0} +--- !u!1 &5834406092755917686 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5834406092755917685} + - component: {fileID: 5834406092755917682} + - component: {fileID: 5834406092755917683} + - component: {fileID: 5834406092755917684} + m_Layer: 5 + m_Name: Key + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &5834406092755917685 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5834406092755917686} + 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_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 5834406091655591273} + - {fileID: 5834406092510226393} + - {fileID: 7570636788080655652} + m_Father: {fileID: 5834406091256718655} + 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: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &5834406092755917682 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5834406092755917686} + m_CullTransparentMesh: 1 +--- !u!114 &5834406092755917683 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5834406092755917686} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &5834406092755917684 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5834406092755917686} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 8 + m_Right: 8 + m_Top: 8 + m_Bottom: 8 + m_ChildAlignment: 4 + m_Spacing: 0 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 + m_ChildScaleWidth: 0 + m_ChildScaleHeight: 0 + m_ReverseArrangement: 0 +--- !u!1 &6355108258070867553 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8912050087328653367} + - component: {fileID: 1046970501797861307} + m_Layer: 5 + m_Name: Expander + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &8912050087328653367 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6355108258070867553} + 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_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 8679172922107940774} + m_Father: {fileID: 5834406092508179349} + 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.5, y: 0.5} +--- !u!114 &1046970501797861307 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6355108258070867553} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 21255a16576b76f4280a765b43a4ae1c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 24 + m_Right: 24 + m_Top: -6 + m_Bottom: 0 + m_ChildAlignment: 0 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 + m_ChildScaleWidth: 0 + m_ChildScaleHeight: 0 +--- !u!1 &7715991554483343456 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7570636788080655652} + - component: {fileID: 8357749348711467279} + - component: {fileID: 3510639864939328373} + - component: {fileID: 9020149657235358073} + m_Layer: 5 + m_Name: Condition + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &7570636788080655652 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7715991554483343456} + 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_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5834406092755917685} + 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.5, y: 0.5} +--- !u!222 &8357749348711467279 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7715991554483343456} + m_CullTransparentMesh: 1 +--- !u!114 &3510639864939328373 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7715991554483343456} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83e7715acbfae1d4b84414c13d03ed3f, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: Condition + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 2b12354fb2d86744887c3e4bfee63986, type: 2} + m_sharedMaterial: {fileID: -3021868053195457599, guid: 2b12354fb2d86744887c3e4bfee63986, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4278190080 + m_fontColor: {r: 0, g: 0, b: 0, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 12 + m_fontSizeBase: 12 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_HorizontalAlignment: 2 + m_VerticalAlignment: 256 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_TextWrappingMode: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!114 &9020149657235358073 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7715991554483343456} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c03870a7d4386e846be005a0ac36e987, type: 3} + m_Name: + m_EditorClassIdentifier: + m_shader: {fileID: 0} +--- !u!1 &8846059653213718660 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7644034394791790906} + - component: {fileID: 2803690609595868592} + - component: {fileID: 9177950703787671617} + - component: {fileID: 3056363139123556364} + m_Layer: 5 + m_Name: Predicate + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &7644034394791790906 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8846059653213718660} + 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_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 219718066529163937} + 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.5, y: 0.5} +--- !u!222 &2803690609595868592 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8846059653213718660} + m_CullTransparentMesh: 1 +--- !u!114 &9177950703787671617 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8846059653213718660} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83e7715acbfae1d4b84414c13d03ed3f, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: Predicate + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 2b12354fb2d86744887c3e4bfee63986, type: 2} + m_sharedMaterial: {fileID: -3021868053195457599, guid: 2b12354fb2d86744887c3e4bfee63986, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4294967295 + m_fontColor: {r: 1, g: 1, b: 1, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 12 + m_fontSizeBase: 12 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_HorizontalAlignment: 1 + m_VerticalAlignment: 256 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_TextWrappingMode: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!114 &3056363139123556364 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8846059653213718660} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c03870a7d4386e846be005a0ac36e987, type: 3} + m_Name: + m_EditorClassIdentifier: + m_shader: {fileID: 0} diff --git a/Assets/Prefabs/UI/Event Group.prefab.meta b/Assets/Prefabs/UI/Event Group.prefab.meta new file mode 100644 index 0000000..46345fc --- /dev/null +++ b/Assets/Prefabs/UI/Event Group.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 5d21267de716a844c92260bad4d20b0a +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Prefabs/UI/Event Unit.prefab b/Assets/Prefabs/UI/Event Unit.prefab new file mode 100644 index 0000000..1072976 --- /dev/null +++ b/Assets/Prefabs/UI/Event Unit.prefab @@ -0,0 +1,2435 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &80450501390156036 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 80450501390156039} + - component: {fileID: 5342074103626402215} + - component: {fileID: 3787898714752304707} + m_Layer: 5 + m_Name: Properties + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &80450501390156039 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 80450501390156036} + 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_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 80450502294307239} + 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.5, y: 0.5} +--- !u!114 &5342074103626402215 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 80450501390156036} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1ce1debad67438245a6e00e503975beb, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_ChildAlignment: 0 + m_spacing: {x: 16, y: 0} + m_itemAlignmentRatio: 0 + m_itemAlignmentStretchingRatio: 0 +--- !u!114 &3787898714752304707 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 80450501390156036} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 22019c55ede3c4245b1934a9a2d4a06b, type: 3} + m_Name: + m_EditorClassIdentifier: + m_prefabEventPropertyView: {fileID: -3940543153975910597, guid: b19e4e6833de5764e9d131bcc9efb4c1, type: 3} +--- !u!1 &80450501543897589 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 80450501543897588} + - component: {fileID: 80450501543897590} + - component: {fileID: 80450501543897591} + - component: {fileID: 1932066282991597056} + m_Layer: 5 + m_Name: Location + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &80450501543897588 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 80450501543897589} + 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_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1276614981859334282} + 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: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &80450501543897590 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 80450501543897589} + m_CullTransparentMesh: 1 +--- !u!114 &80450501543897591 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 80450501543897589} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83e7715acbfae1d4b84414c13d03ed3f, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: Location + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 2b12354fb2d86744887c3e4bfee63986, type: 2} + m_sharedMaterial: {fileID: -3021868053195457599, guid: 2b12354fb2d86744887c3e4bfee63986, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4294967295 + m_fontColor: {r: 1, g: 1, b: 1, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 22 + m_fontSizeBase: 22 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_HorizontalAlignment: 1 + m_VerticalAlignment: 256 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_TextWrappingMode: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!114 &1932066282991597056 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 80450501543897589} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c03870a7d4386e846be005a0ac36e987, type: 3} + m_Name: + m_EditorClassIdentifier: + m_shader: {fileID: 0} +--- !u!1 &80450501697287681 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 80450501697287680} + - component: {fileID: 80450501697287683} + - component: {fileID: 445798728694032304} + - component: {fileID: 9023894030933360738} + m_Layer: 5 + m_Name: Event Unit + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &80450501697287680 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 80450501697287681} + 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_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 80450501902254568} + - {fileID: 80450503375932420} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 320, y: 160} + m_Pivot: {x: 0, y: 1} +--- !u!114 &80450501697287683 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 80450501697287681} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_ChildAlignment: 0 + m_Spacing: 0 + m_ChildForceExpandWidth: 0 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 + m_ChildScaleWidth: 0 + m_ChildScaleHeight: 0 + m_ReverseArrangement: 0 +--- !u!114 &445798728694032304 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 80450501697287681} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + 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_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, 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_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 80450501902254570} + m_OnClick: + m_PersistentCalls: + m_Calls: [] +--- !u!114 &9023894030933360738 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 80450501697287681} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 734ae71f23b2c1f4d9b38aa06a0de86c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_reportView: + - {fileID: 80450501902254570} + - {fileID: 80450501797848155} + - {fileID: 80450501797848155} + - {fileID: 80450502279952835} + - {fileID: 80450503204041368} + m_keyView: {fileID: 80450501884541539} + m_keyTitleView: {fileID: 1443925177126299440} + m_keyValueView: {fileID: 4418729342044054100} + m_keyConditionView: {fileID: 982023614326607205} + m_locationView: {fileID: 1932066282991597056} + m_predicateView: {fileID: 8654799436829298006} + m_timeView: {fileID: 5465326677663977747} + m_propertyListView: {fileID: 3787898714752304707} + m_reportViewButton: {fileID: 445798728694032304} + m_titleView: {fileID: 6435372855871633828} + m_revisionViewContainer: {fileID: 80450503204041367} + m_revisionView: {fileID: 2989991316368909908} + m_listView: {fileID: 4010917344764203126} + m_revisionViewContainerButton: {fileID: 3192150530507149200} +--- !u!1 &80450501797848150 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 80450501797848153} + - component: {fileID: 80450501797848154} + - component: {fileID: 80450501797848155} + - component: {fileID: 80450501797848152} + - component: {fileID: 3938971419966784215} + m_Layer: 5 + m_Name: Report Header + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &80450501797848153 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 80450501797848150} + 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_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 80450502279952833} + - {fileID: 80450503204041366} + m_Father: {fileID: 80450501804675484} + 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: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &80450501797848154 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 80450501797848150} + m_CullTransparentMesh: 1 +--- !u!114 &80450501797848155 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 80450501797848150} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 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 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &80450501797848152 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 80450501797848150} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 30649d3a9faa99c48a7b1166b86bf2a0, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_ChildAlignment: 0 + m_Spacing: -3 + m_ChildForceExpandWidth: 0 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 + m_ChildScaleWidth: 1 + m_ChildScaleHeight: 0 + m_ReverseArrangement: 0 +--- !u!114 &3938971419966784215 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 80450501797848150} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 0 + m_MinWidth: -1 + m_MinHeight: -1 + m_PreferredWidth: -1 + m_PreferredHeight: -1 + m_FlexibleWidth: -1 + m_FlexibleHeight: 0 + m_LayoutPriority: 1 +--- !u!1 &80450501804675485 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 80450501804675484} + - component: {fileID: 80450501804675488} + - component: {fileID: 80450501804675489} + - component: {fileID: 80450501804675486} + - component: {fileID: 80450501804675487} + m_Layer: 5 + m_Name: _content + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &80450501804675484 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 80450501804675485} + 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_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 80450501797848153} + - {fileID: 80450502120133029} + m_Father: {fileID: 80450501902254568} + 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: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &80450501804675488 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 80450501804675485} + m_CullTransparentMesh: 1 +--- !u!114 &80450501804675489 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 80450501804675485} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 0.007843138} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 5867898c2e0a7f14c8a8e96f2856e8f0, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &80450501804675486 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 80450501804675485} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 31a19414c41e5ae4aae2af33fee712f6, type: 3} + m_Name: + m_EditorClassIdentifier: + m_ShowMaskGraphic: 0 +--- !u!114 &80450501804675487 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 80450501804675485} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_ChildAlignment: 0 + m_Spacing: 0 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 + m_ChildScaleWidth: 0 + m_ChildScaleHeight: 0 + m_ReverseArrangement: 0 +--- !u!1 &80450501861713797 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 80450501861713796} + - component: {fileID: 80450501861713798} + - component: {fileID: 80450501861713799} + - component: {fileID: 5465326677663977747} + m_Layer: 5 + m_Name: Time + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &80450501861713796 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 80450501861713797} + 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_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 80450502294307239} + 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.5, y: 0.5} +--- !u!222 &80450501861713798 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 80450501861713797} + m_CullTransparentMesh: 1 +--- !u!114 &80450501861713799 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 80450501861713797} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83e7715acbfae1d4b84414c13d03ed3f, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: 2000-01-01 00:00:00 (UTC+00:00) + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 2b12354fb2d86744887c3e4bfee63986, type: 2} + m_sharedMaterial: {fileID: -3021868053195457599, guid: 2b12354fb2d86744887c3e4bfee63986, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4294967295 + m_fontColor: {r: 1, g: 1, b: 1, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 12 + m_fontSizeBase: 12 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_HorizontalAlignment: 1 + m_VerticalAlignment: 256 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_TextWrappingMode: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!114 &5465326677663977747 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 80450501861713797} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c03870a7d4386e846be005a0ac36e987, type: 3} + m_Name: + m_EditorClassIdentifier: + m_shader: {fileID: 0} +--- !u!1 &80450501884541534 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 80450501884541537} + - component: {fileID: 80450501884541538} + - component: {fileID: 80450501884541539} + - component: {fileID: 80450501884541536} + m_Layer: 5 + m_Name: Key + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &80450501884541537 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 80450501884541534} + 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_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 80450502245152642} + - {fileID: 80450503330427149} + - {fileID: 7854064457888656693} + m_Father: {fileID: 80450502120133029} + 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: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &80450501884541538 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 80450501884541534} + m_CullTransparentMesh: 1 +--- !u!114 &80450501884541539 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 80450501884541534} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &80450501884541536 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 80450501884541534} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 8 + m_Right: 8 + m_Top: 8 + m_Bottom: 8 + m_ChildAlignment: 4 + m_Spacing: 0 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 + m_ChildScaleWidth: 0 + m_ChildScaleHeight: 0 + m_ReverseArrangement: 0 +--- !u!1 &80450501902254569 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 80450501902254568} + - component: {fileID: 80450501902254573} + - component: {fileID: 80450501902254570} + - component: {fileID: 80450501902254571} + m_Layer: 5 + m_Name: Event Unit Report + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &80450501902254568 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 80450501902254569} + 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_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 80450501804675484} + m_Father: {fileID: 80450501697287680} + 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: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &80450501902254573 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 80450501902254569} + m_CullTransparentMesh: 1 +--- !u!114 &80450501902254570 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 80450501902254569} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: caade3ded4573b540a946c53bd789b37, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &80450501902254571 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 80450501902254569} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 21255a16576b76f4280a765b43a4ae1c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_ChildAlignment: 0 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 + m_ChildScaleWidth: 0 + m_ChildScaleHeight: 0 +--- !u!1 &80450502120133026 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 80450502120133029} + - component: {fileID: 80450502120133028} + m_Layer: 5 + m_Name: Report Content + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &80450502120133029 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 80450502120133026} + 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_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 80450501884541537} + - {fileID: 80450502294307239} + m_Father: {fileID: 80450501804675484} + 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.5, y: 0.5} +--- !u!114 &80450502120133028 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 80450502120133026} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0bbf3330df0a07e46bcdf0b3c4879ecf, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: -3 + m_Bottom: 0 + m_ChildAlignment: 0 + m_side: 3 + m_slideIndex: 0 + m_dockOccupiedRatio: 0.2857143 +--- !u!1 &80450502245152643 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 80450502245152642} + - component: {fileID: 80450502245152644} + - component: {fileID: 80450502245152645} + - component: {fileID: 1443925177126299440} + m_Layer: 5 + m_Name: Title + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &80450502245152642 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 80450502245152643} + 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_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 80450501884541537} + 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: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &80450502245152644 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 80450502245152643} + m_CullTransparentMesh: 1 +--- !u!114 &80450502245152645 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 80450502245152643} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83e7715acbfae1d4b84414c13d03ed3f, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: Key + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 2b12354fb2d86744887c3e4bfee63986, type: 2} + m_sharedMaterial: {fileID: -3021868053195457599, guid: 2b12354fb2d86744887c3e4bfee63986, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4278190080 + m_fontColor: {r: 0, g: 0, b: 0, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 12 + m_fontSizeBase: 12 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_HorizontalAlignment: 2 + m_VerticalAlignment: 256 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_TextWrappingMode: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!114 &1443925177126299440 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 80450502245152643} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c03870a7d4386e846be005a0ac36e987, type: 3} + m_Name: + m_EditorClassIdentifier: + m_shader: {fileID: 0} +--- !u!1 &80450502279952830 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 80450502279952833} + - component: {fileID: 80450502279952834} + - component: {fileID: 80450502279952835} + - component: {fileID: 80450502279952832} + m_Layer: 5 + m_Name: Title + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &80450502279952833 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 80450502279952830} + 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_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 80450502668165710} + m_Father: {fileID: 80450501797848153} + 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: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &80450502279952834 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 80450502279952830} + m_CullTransparentMesh: 1 +--- !u!114 &80450502279952835 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 80450502279952830} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 5c322b9ff21616647910d5f11355d1fc, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &80450502279952832 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 80450502279952830} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 21255a16576b76f4280a765b43a4ae1c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_ChildAlignment: 0 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 1 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 + m_ChildScaleWidth: 0 + m_ChildScaleHeight: 0 +--- !u!1 &80450502294307236 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 80450502294307239} + - component: {fileID: 80450502294307240} + - component: {fileID: 80450502294307241} + - component: {fileID: 80450502294307238} + m_Layer: 5 + m_Name: Summary + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &80450502294307239 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 80450502294307236} + 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_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1276614981859334282} + - {fileID: 80450501861713796} + - {fileID: 80450501390156039} + m_Father: {fileID: 80450502120133029} + 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.5, y: 0.5} +--- !u!222 &80450502294307240 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 80450502294307236} + m_CullTransparentMesh: 1 +--- !u!114 &80450502294307241 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 80450502294307236} + m_Enabled: 0 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &80450502294307238 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 80450502294307236} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 4 + m_Right: 8 + m_Top: 4 + m_Bottom: 4 + m_ChildAlignment: 3 + m_Spacing: 0 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 + m_ChildScaleWidth: 0 + m_ChildScaleHeight: 0 + m_ReverseArrangement: 0 +--- !u!1 &80450502668165711 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 80450502668165710} + - component: {fileID: 80450502668165712} + - component: {fileID: 80450502668165713} + - component: {fileID: 6435372855871633828} + m_Layer: 5 + m_Name: _text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &80450502668165710 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 80450502668165711} + 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_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 80450502279952833} + 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: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &80450502668165712 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 80450502668165711} + m_CullTransparentMesh: 1 +--- !u!114 &80450502668165713 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 80450502668165711} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83e7715acbfae1d4b84414c13d03ed3f, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: Title + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 2b12354fb2d86744887c3e4bfee63986, type: 2} + m_sharedMaterial: {fileID: -3021868053195457599, guid: 2b12354fb2d86744887c3e4bfee63986, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4294967295 + m_fontColor: {r: 1, g: 1, b: 1, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 14 + m_fontSizeBase: 14 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_HorizontalAlignment: 2 + m_VerticalAlignment: 512 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_TextWrappingMode: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 12, y: 4, z: 12, w: 4} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!114 &6435372855871633828 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 80450502668165711} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c03870a7d4386e846be005a0ac36e987, type: 3} + m_Name: + m_EditorClassIdentifier: + m_shader: {fileID: 0} +--- !u!1 &80450503204041367 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 80450503204041366} + - component: {fileID: 80450503204041371} + - component: {fileID: 80450503204041368} + - component: {fileID: 1293927077413037707} + - component: {fileID: 80450503204041369} + - component: {fileID: 3192150530507149200} + m_Layer: 5 + m_Name: Revision + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &80450503204041366 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 80450503204041367} + 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_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 80450503436090928} + m_Father: {fileID: 80450501797848153} + 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.5, y: 0.5} +--- !u!222 &80450503204041371 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 80450503204041367} + m_CullTransparentMesh: 1 +--- !u!114 &80450503204041368 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 80450503204041367} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 5c322b9ff21616647910d5f11355d1fc, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &1293927077413037707 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 80450503204041367} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 21255a16576b76f4280a765b43a4ae1c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_ChildAlignment: 0 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 1 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 + m_ChildScaleWidth: 0 + m_ChildScaleHeight: 0 +--- !u!114 &80450503204041369 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 80450503204041367} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 0 + m_MinWidth: 90 + m_MinHeight: -1 + m_PreferredWidth: 90 + m_PreferredHeight: -1 + m_FlexibleWidth: 0 + m_FlexibleHeight: -1 + m_LayoutPriority: 1 +--- !u!114 &3192150530507149200 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 80450503204041367} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + 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_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, 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_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 80450503204041368} + m_OnClick: + m_PersistentCalls: + m_Calls: [] +--- !u!1 &80450503330427146 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 80450503330427149} + - component: {fileID: 80450503330427151} + - component: {fileID: 80450503330427148} + - component: {fileID: 4418729342044054100} + m_Layer: 5 + m_Name: Value + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &80450503330427149 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 80450503330427146} + 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_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 80450501884541537} + 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.5, y: 0.5} +--- !u!222 &80450503330427151 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 80450503330427146} + m_CullTransparentMesh: 1 +--- !u!114 &80450503330427148 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 80450503330427146} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83e7715acbfae1d4b84414c13d03ed3f, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: 1.0 + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 2b12354fb2d86744887c3e4bfee63986, type: 2} + m_sharedMaterial: {fileID: -3021868053195457599, guid: 2b12354fb2d86744887c3e4bfee63986, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4278190080 + m_fontColor: {r: 0, g: 0, b: 0, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 20 + m_fontSizeBase: 20 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_HorizontalAlignment: 2 + m_VerticalAlignment: 256 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_TextWrappingMode: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!114 &4418729342044054100 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 80450503330427146} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c03870a7d4386e846be005a0ac36e987, type: 3} + m_Name: + m_EditorClassIdentifier: + m_shader: {fileID: 0} +--- !u!1 &80450503375932421 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 80450503375932420} + - component: {fileID: 80450503375932423} + - component: {fileID: 4010917344764203126} + m_Layer: 5 + m_Name: Event List + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &80450503375932420 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 80450503375932421} + 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_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 80450501697287680} + 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.5, y: 0.5} +--- !u!114 &80450503375932423 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 80450503375932421} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_ChildAlignment: 0 + m_Spacing: 0 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 + m_ChildScaleWidth: 0 + m_ChildScaleHeight: 1 + m_ReverseArrangement: 0 +--- !u!114 &4010917344764203126 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 80450503375932421} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 11a3f253a932b1e4ebe0c7bdad12b3bf, type: 3} + m_Name: + m_EditorClassIdentifier: + m_prefabEventView: {fileID: -5722803998811165524, guid: df170ec3bdf011b4c81181d368321d33, type: 3} +--- !u!1 &80450503436090929 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 80450503436090928} + - component: {fileID: 80450503436090930} + - component: {fileID: 80450503436090931} + - component: {fileID: 2989991316368909908} + m_Layer: 5 + m_Name: _text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &80450503436090928 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 80450503436090929} + 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_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 80450503204041366} + 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: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &80450503436090930 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 80450503436090929} + m_CullTransparentMesh: 1 +--- !u!114 &80450503436090931 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 80450503436090929} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83e7715acbfae1d4b84414c13d03ed3f, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: '#100 (Fin.)' + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 2b12354fb2d86744887c3e4bfee63986, type: 2} + m_sharedMaterial: {fileID: -3021868053195457599, guid: 2b12354fb2d86744887c3e4bfee63986, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4294967295 + m_fontColor: {r: 1, g: 1, b: 1, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 14 + m_fontSizeBase: 14 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_HorizontalAlignment: 2 + m_VerticalAlignment: 512 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_TextWrappingMode: 0 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 12, y: 4, z: 12, w: 4} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!114 &2989991316368909908 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 80450503436090929} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c03870a7d4386e846be005a0ac36e987, type: 3} + m_Name: + m_EditorClassIdentifier: + m_shader: {fileID: 0} +--- !u!1 &4303620419042550251 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7854064457888656693} + - component: {fileID: 8108920680829285094} + - component: {fileID: 7043582914778565776} + - component: {fileID: 982023614326607205} + m_Layer: 5 + m_Name: Condition + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &7854064457888656693 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4303620419042550251} + 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_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 80450501884541537} + 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.5, y: 0.5} +--- !u!222 &8108920680829285094 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4303620419042550251} + m_CullTransparentMesh: 1 +--- !u!114 &7043582914778565776 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4303620419042550251} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83e7715acbfae1d4b84414c13d03ed3f, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: Condition + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 2b12354fb2d86744887c3e4bfee63986, type: 2} + m_sharedMaterial: {fileID: -3021868053195457599, guid: 2b12354fb2d86744887c3e4bfee63986, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4278190080 + m_fontColor: {r: 0, g: 0, b: 0, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 12 + m_fontSizeBase: 12 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_HorizontalAlignment: 2 + m_VerticalAlignment: 256 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_TextWrappingMode: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!114 &982023614326607205 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4303620419042550251} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c03870a7d4386e846be005a0ac36e987, type: 3} + m_Name: + m_EditorClassIdentifier: + m_shader: {fileID: 0} +--- !u!1 &4939851336661202173 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8545762996354293361} + - component: {fileID: 6864217503214847098} + - component: {fileID: 5168326023663491122} + - component: {fileID: 8654799436829298006} + m_Layer: 5 + m_Name: Predicate + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &8545762996354293361 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4939851336661202173} + 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_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1276614981859334282} + 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.5, y: 0.5} +--- !u!222 &6864217503214847098 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4939851336661202173} + m_CullTransparentMesh: 1 +--- !u!114 &5168326023663491122 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4939851336661202173} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83e7715acbfae1d4b84414c13d03ed3f, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: Predicate + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 2b12354fb2d86744887c3e4bfee63986, type: 2} + m_sharedMaterial: {fileID: -3021868053195457599, guid: 2b12354fb2d86744887c3e4bfee63986, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4294967295 + m_fontColor: {r: 1, g: 1, b: 1, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 12 + m_fontSizeBase: 12 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_HorizontalAlignment: 1 + m_VerticalAlignment: 256 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_TextWrappingMode: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!114 &8654799436829298006 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4939851336661202173} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c03870a7d4386e846be005a0ac36e987, type: 3} + m_Name: + m_EditorClassIdentifier: + m_shader: {fileID: 0} +--- !u!1 &8327829369307473434 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1276614981859334282} + - component: {fileID: 658695714095452811} + m_Layer: 5 + m_Name: Sentence + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1276614981859334282 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8327829369307473434} + 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_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 80450501543897588} + - {fileID: 8545762996354293361} + m_Father: {fileID: 80450502294307239} + 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: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &658695714095452811 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8327829369307473434} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1ce1debad67438245a6e00e503975beb, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_ChildAlignment: 0 + m_spacing: {x: 4, y: 0} + m_itemAlignmentRatio: 0.75 + m_itemAlignmentStretchingRatio: 0 diff --git a/Assets/Prefabs/UI/Event Unit.prefab.meta b/Assets/Prefabs/UI/Event Unit.prefab.meta new file mode 100644 index 0000000..fa5457a --- /dev/null +++ b/Assets/Prefabs/UI/Event Unit.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: a8c99ee4bb8f6314d8a9f430b4bcd0a0 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Prefabs/UI/Event.prefab b/Assets/Prefabs/UI/Event.prefab new file mode 100644 index 0000000..d2f6162 --- /dev/null +++ b/Assets/Prefabs/UI/Event.prefab @@ -0,0 +1,1786 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &3913774528171892904 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3913774528171892905} + - component: {fileID: 3913774528171892908} + - component: {fileID: 3913774528171892911} + - component: {fileID: 3913774528171892910} + m_Layer: 5 + m_Name: Rail + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &3913774528171892905 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3913774528171892904} + 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_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3913774529903216065} + 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: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &3913774528171892908 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3913774528171892904} + m_CullTransparentMesh: 1 +--- !u!114 &3913774528171892911 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3913774528171892904} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &3913774528171892910 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3913774528171892904} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 0 + m_MinWidth: 2 + m_MinHeight: -1 + m_PreferredWidth: -1 + m_PreferredHeight: -1 + m_FlexibleWidth: -1 + m_FlexibleHeight: -1 + m_LayoutPriority: 1 +--- !u!1 &3913774529213522515 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3913774529213522512} + - component: {fileID: 3913774529213522516} + - component: {fileID: 3913774529213522519} + - component: {fileID: 3913774529213522518} + - component: {fileID: 3913774529213522513} + m_Layer: 5 + m_Name: Key + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &3913774529213522512 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3913774529213522515} + 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_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 3913774529609655469} + - {fileID: 3913774529601653667} + - {fileID: 1555661482230922473} + m_Father: {fileID: 3913774529903216065} + m_RootOrder: 3 + 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.5, y: 0.5} +--- !u!222 &3913774529213522516 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3913774529213522515} + m_CullTransparentMesh: 1 +--- !u!114 &3913774529213522519 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3913774529213522515} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &3913774529213522518 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3913774529213522515} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 8 + m_Right: 8 + m_Top: 8 + m_Bottom: 8 + m_ChildAlignment: 4 + m_Spacing: 0 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 + m_ChildScaleWidth: 0 + m_ChildScaleHeight: 0 + m_ReverseArrangement: 0 +--- !u!114 &3913774529213522513 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3913774529213522515} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 0 + m_MinWidth: 0 + m_MinHeight: -1 + m_PreferredWidth: 0 + m_PreferredHeight: -1 + m_FlexibleWidth: 2 + m_FlexibleHeight: -1 + m_LayoutPriority: 1 +--- !u!1 &3913774529370232166 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3913774529370232167} + - component: {fileID: 2535409373613457521} + - component: {fileID: 5826342127904459172} + m_Layer: 5 + m_Name: Properties + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &3913774529370232167 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3913774529370232166} + 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_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3913774529902919372} + 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.5, y: 0.5} +--- !u!114 &2535409373613457521 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3913774529370232166} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1ce1debad67438245a6e00e503975beb, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_ChildAlignment: 0 + m_spacing: {x: 16, y: 0} + m_itemAlignmentRatio: 0 + m_itemAlignmentStretchingRatio: 0 +--- !u!114 &5826342127904459172 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3913774529370232166} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 22019c55ede3c4245b1934a9a2d4a06b, type: 3} + m_Name: + m_EditorClassIdentifier: + m_prefabEventPropertyView: {fileID: -3940543153975910597, guid: b19e4e6833de5764e9d131bcc9efb4c1, type: 3} +--- !u!1 &3913774529556902578 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3913774529556902579} + - component: {fileID: 3913774529556902576} + m_Layer: 5 + m_Name: _spacing + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &3913774529556902579 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3913774529556902578} + 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_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3913774529903216065} + 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.5, y: 0.5} +--- !u!114 &3913774529556902576 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3913774529556902578} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 0 + m_MinWidth: 4 + m_MinHeight: -1 + m_PreferredWidth: -1 + m_PreferredHeight: -1 + m_FlexibleWidth: -1 + m_FlexibleHeight: -1 + m_LayoutPriority: 1 +--- !u!1 &3913774529601653666 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3913774529601653667} + - component: {fileID: 3913774529601653665} + - component: {fileID: 3913774529601653664} + - component: {fileID: 4241997480962929832} + m_Layer: 5 + m_Name: Value + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &3913774529601653667 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3913774529601653666} + 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_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3913774529213522512} + 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.5, y: 0.5} +--- !u!222 &3913774529601653665 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3913774529601653666} + m_CullTransparentMesh: 1 +--- !u!114 &3913774529601653664 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3913774529601653666} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83e7715acbfae1d4b84414c13d03ed3f, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: 1.0 + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 2b12354fb2d86744887c3e4bfee63986, type: 2} + m_sharedMaterial: {fileID: -3021868053195457599, guid: 2b12354fb2d86744887c3e4bfee63986, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4278190080 + m_fontColor: {r: 0, g: 0, b: 0, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 20 + m_fontSizeBase: 20 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 0 + m_fontSizeMax: 0 + m_fontStyle: 0 + m_HorizontalAlignment: 2 + m_VerticalAlignment: 256 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_TextWrappingMode: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_parseCtrlCharacters: 0 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!114 &4241997480962929832 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3913774529601653666} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c03870a7d4386e846be005a0ac36e987, type: 3} + m_Name: + m_EditorClassIdentifier: + m_shader: {fileID: 0} +--- !u!1 &3913774529607049031 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3913774529607049028} + - component: {fileID: 3913774529607049034} + - component: {fileID: 3913774529607049029} + - component: {fileID: 7396477248684304470} + m_Layer: 5 + m_Name: Location + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &3913774529607049028 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3913774529607049031} + 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_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 7838244607878739931} + 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: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &3913774529607049034 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3913774529607049031} + m_CullTransparentMesh: 1 +--- !u!114 &3913774529607049029 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3913774529607049031} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83e7715acbfae1d4b84414c13d03ed3f, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: Location + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 2b12354fb2d86744887c3e4bfee63986, type: 2} + m_sharedMaterial: {fileID: -3021868053195457599, guid: 2b12354fb2d86744887c3e4bfee63986, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4294967295 + m_fontColor: {r: 1, g: 1, b: 1, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 22 + m_fontSizeBase: 22 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 0 + m_fontSizeMax: 0 + m_fontStyle: 0 + m_HorizontalAlignment: 1 + m_VerticalAlignment: 256 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_TextWrappingMode: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_parseCtrlCharacters: 0 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!114 &7396477248684304470 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3913774529607049031} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c03870a7d4386e846be005a0ac36e987, type: 3} + m_Name: + m_EditorClassIdentifier: + m_shader: {fileID: 0} +--- !u!1 &3913774529609655468 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3913774529609655469} + - component: {fileID: 3913774529609655475} + - component: {fileID: 3913774529609655474} + - component: {fileID: 8983747288499142204} + m_Layer: 5 + m_Name: Title + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &3913774529609655469 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3913774529609655468} + 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_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3913774529213522512} + 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: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &3913774529609655475 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3913774529609655468} + m_CullTransparentMesh: 1 +--- !u!114 &3913774529609655474 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3913774529609655468} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83e7715acbfae1d4b84414c13d03ed3f, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: Key + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 2b12354fb2d86744887c3e4bfee63986, type: 2} + m_sharedMaterial: {fileID: -3021868053195457599, guid: 2b12354fb2d86744887c3e4bfee63986, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4278190080 + m_fontColor: {r: 0, g: 0, b: 0, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 12 + m_fontSizeBase: 12 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 0 + m_fontSizeMax: 0 + m_fontStyle: 0 + m_HorizontalAlignment: 2 + m_VerticalAlignment: 256 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_TextWrappingMode: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_parseCtrlCharacters: 0 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!114 &8983747288499142204 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3913774529609655468} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c03870a7d4386e846be005a0ac36e987, type: 3} + m_Name: + m_EditorClassIdentifier: + m_shader: {fileID: 0} +--- !u!1 &3913774529632130608 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3913774529632130609} + - component: {fileID: 3913774529632130615} + - component: {fileID: 3913774529632130614} + - component: {fileID: 8636177924945764816} + m_Layer: 5 + m_Name: Time + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &3913774529632130609 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3913774529632130608} + 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_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3913774529902919372} + 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.5, y: 0.5} +--- !u!222 &3913774529632130615 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3913774529632130608} + m_CullTransparentMesh: 1 +--- !u!114 &3913774529632130614 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3913774529632130608} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83e7715acbfae1d4b84414c13d03ed3f, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: 2000-01-01 00:00:00 + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 2b12354fb2d86744887c3e4bfee63986, type: 2} + m_sharedMaterial: {fileID: -3021868053195457599, guid: 2b12354fb2d86744887c3e4bfee63986, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4294967295 + m_fontColor: {r: 1, g: 1, b: 1, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 12 + m_fontSizeBase: 12 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 0 + m_fontSizeMax: 0 + m_fontStyle: 0 + m_HorizontalAlignment: 1 + m_VerticalAlignment: 256 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_TextWrappingMode: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_parseCtrlCharacters: 0 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!114 &8636177924945764816 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3913774529632130608} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c03870a7d4386e846be005a0ac36e987, type: 3} + m_Name: + m_EditorClassIdentifier: + m_shader: {fileID: 0} +--- !u!1 &3913774529674276057 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3913774529674276062} + - component: {fileID: 3913774529674276061} + - component: {fileID: 3913774529674276060} + - component: {fileID: 3913774529674276063} + - component: {fileID: 6259669005375505982} + m_Layer: 5 + m_Name: Revision + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &3913774529674276062 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3913774529674276057} + 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_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3913774529903216065} + 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.5, y: 0.5} +--- !u!222 &3913774529674276061 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3913774529674276057} + m_CullTransparentMesh: 1 +--- !u!114 &3913774529674276060 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3913774529674276057} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83e7715acbfae1d4b84414c13d03ed3f, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: '#1' + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 2b12354fb2d86744887c3e4bfee63986, type: 2} + m_sharedMaterial: {fileID: -3021868053195457599, guid: 2b12354fb2d86744887c3e4bfee63986, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4294967295 + m_fontColor: {r: 1, g: 1, b: 1, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 18 + m_fontSizeBase: 18 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 0 + m_fontSizeMax: 0 + m_fontStyle: 0 + m_HorizontalAlignment: 1 + m_VerticalAlignment: 512 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_TextWrappingMode: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_parseCtrlCharacters: 0 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 2, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!114 &3913774529674276063 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3913774529674276057} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 0 + m_MinWidth: 0 + m_MinHeight: -1 + m_PreferredWidth: 0 + m_PreferredHeight: -1 + m_FlexibleWidth: 1 + m_FlexibleHeight: -1 + m_LayoutPriority: 1 +--- !u!114 &6259669005375505982 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3913774529674276057} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c03870a7d4386e846be005a0ac36e987, type: 3} + m_Name: + m_EditorClassIdentifier: + m_shader: {fileID: 0} +--- !u!1 &3913774529902919375 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3913774529902919372} + - component: {fileID: 3913774529902919376} + - component: {fileID: 3913774529902919379} + - component: {fileID: 3913774529902919378} + - component: {fileID: 3913774529902919373} + m_Layer: 5 + m_Name: Summary + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &3913774529902919372 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3913774529902919375} + 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_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 7838244607878739931} + - {fileID: 3913774529632130609} + - {fileID: 3913774529370232167} + m_Father: {fileID: 3913774529903216065} + 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.5, y: 0.5} +--- !u!222 &3913774529902919376 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3913774529902919375} + m_CullTransparentMesh: 1 +--- !u!114 &3913774529902919379 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3913774529902919375} + m_Enabled: 0 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &3913774529902919378 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3913774529902919375} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 4 + m_Right: 4 + m_Top: 4 + m_Bottom: 4 + m_ChildAlignment: 4 + m_Spacing: 0 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 + m_ChildScaleWidth: 0 + m_ChildScaleHeight: 0 + m_ReverseArrangement: 0 +--- !u!114 &3913774529902919373 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3913774529902919375} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 0 + m_MinWidth: 0 + m_MinHeight: -1 + m_PreferredWidth: 0 + m_PreferredHeight: -1 + m_FlexibleWidth: 4 + m_FlexibleHeight: -1 + m_LayoutPriority: 1 +--- !u!1 &3913774529903216064 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3913774529903216065} + - component: {fileID: 859349566035249752} + - component: {fileID: 7014756207835106560} + - component: {fileID: 396590349873783368} + - component: {fileID: 3913774529903216070} + - component: {fileID: -5722803998811165524} + m_Layer: 5 + m_Name: Event + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &3913774529903216065 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3913774529903216064} + 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_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 3913774528171892905} + - {fileID: 3913774529556902579} + - {fileID: 3913774529674276062} + - {fileID: 3913774529213522512} + - {fileID: 3913774529902919372} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 320, y: 80} + m_Pivot: {x: 0, y: 1} +--- !u!222 &859349566035249752 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3913774529903216064} + m_CullTransparentMesh: 1 +--- !u!114 &7014756207835106560 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3913774529903216064} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 0} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &396590349873783368 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3913774529903216064} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + 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_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, 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_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 3913774528171892911} + m_OnClick: + m_PersistentCalls: + m_Calls: [] +--- !u!114 &3913774529903216070 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3913774529903216064} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 30649d3a9faa99c48a7b1166b86bf2a0, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_ChildAlignment: 0 + m_Spacing: 0 + m_ChildForceExpandWidth: 0 + m_ChildForceExpandHeight: 1 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 + m_ChildScaleWidth: 1 + m_ChildScaleHeight: 0 + m_ReverseArrangement: 0 +--- !u!114 &-5722803998811165524 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3913774529903216064} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9e5a2623e62bafc4e9f568053223b4ef, type: 3} + m_Name: + m_EditorClassIdentifier: + m_reportView: + - {fileID: 3913774528171892911} + m_keyView: {fileID: 3913774529213522519} + m_keyTitleView: {fileID: 8983747288499142204} + m_keyValueView: {fileID: 4241997480962929832} + m_keyConditionView: {fileID: 5126399493325244587} + m_locationView: {fileID: 7396477248684304470} + m_predicateView: {fileID: 3296447696111715972} + m_timeView: {fileID: 8636177924945764816} + m_propertyListView: {fileID: 5826342127904459172} + m_reportViewButton: {fileID: 396590349873783368} + m_titleView: {fileID: 0} + m_revisionViewContainer: {fileID: 3913774529674276057} + m_revisionView: {fileID: 6259669005375505982} +--- !u!1 &4412266777753179456 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3370482957866633433} + - component: {fileID: 6977910020062333758} + - component: {fileID: 5209847457958900152} + - component: {fileID: 3296447696111715972} + m_Layer: 5 + m_Name: Predicate + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &3370482957866633433 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4412266777753179456} + 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_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 7838244607878739931} + 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.5, y: 0.5} +--- !u!222 &6977910020062333758 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4412266777753179456} + m_CullTransparentMesh: 1 +--- !u!114 &5209847457958900152 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4412266777753179456} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83e7715acbfae1d4b84414c13d03ed3f, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: Predicate + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 2b12354fb2d86744887c3e4bfee63986, type: 2} + m_sharedMaterial: {fileID: -3021868053195457599, guid: 2b12354fb2d86744887c3e4bfee63986, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4294967295 + m_fontColor: {r: 1, g: 1, b: 1, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 12 + m_fontSizeBase: 12 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 0 + m_fontSizeMax: 0 + m_fontStyle: 0 + m_HorizontalAlignment: 1 + m_VerticalAlignment: 256 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_TextWrappingMode: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_parseCtrlCharacters: 0 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!114 &3296447696111715972 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4412266777753179456} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c03870a7d4386e846be005a0ac36e987, type: 3} + m_Name: + m_EditorClassIdentifier: + m_shader: {fileID: 0} +--- !u!1 &7874974698646029946 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1555661482230922473} + - component: {fileID: 1618853099505256819} + - component: {fileID: 15697949687015208} + - component: {fileID: 5126399493325244587} + m_Layer: 5 + m_Name: Condition + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1555661482230922473 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7874974698646029946} + 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_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3913774529213522512} + 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.5, y: 0.5} +--- !u!222 &1618853099505256819 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7874974698646029946} + m_CullTransparentMesh: 1 +--- !u!114 &15697949687015208 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7874974698646029946} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83e7715acbfae1d4b84414c13d03ed3f, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: Condition + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 2b12354fb2d86744887c3e4bfee63986, type: 2} + m_sharedMaterial: {fileID: -3021868053195457599, guid: 2b12354fb2d86744887c3e4bfee63986, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4278190080 + m_fontColor: {r: 0, g: 0, b: 0, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 12 + m_fontSizeBase: 12 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 0 + m_fontSizeMax: 0 + m_fontStyle: 0 + m_HorizontalAlignment: 2 + m_VerticalAlignment: 256 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_TextWrappingMode: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_parseCtrlCharacters: 0 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!114 &5126399493325244587 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7874974698646029946} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c03870a7d4386e846be005a0ac36e987, type: 3} + m_Name: + m_EditorClassIdentifier: + m_shader: {fileID: 0} +--- !u!1 &8631234940969065017 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7838244607878739931} + - component: {fileID: 8454465575626034724} + m_Layer: 5 + m_Name: Sentence + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &7838244607878739931 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8631234940969065017} + 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_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 3913774529607049028} + - {fileID: 3370482957866633433} + m_Father: {fileID: 3913774529902919372} + 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: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &8454465575626034724 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8631234940969065017} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1ce1debad67438245a6e00e503975beb, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_ChildAlignment: 0 + m_spacing: {x: 4, y: 0} + m_itemAlignmentRatio: 0.75 + m_itemAlignmentStretchingRatio: 0 diff --git a/Assets/Prefabs/UI/Event.prefab.meta b/Assets/Prefabs/UI/Event.prefab.meta new file mode 100644 index 0000000..f9bedfe --- /dev/null +++ b/Assets/Prefabs/UI/Event.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: df170ec3bdf011b4c81181d368321d33 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Prefabs/UI/Property.prefab b/Assets/Prefabs/UI/Property.prefab new file mode 100644 index 0000000..1cece5f --- /dev/null +++ b/Assets/Prefabs/UI/Property.prefab @@ -0,0 +1,165 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &5569359501729395026 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5569359501729395037} + - component: {fileID: 5569359501729395039} + - component: {fileID: 5569359501729395036} + - component: {fileID: 8105243158765966554} + - component: {fileID: -3940543153975910597} + m_Layer: 5 + m_Name: Property + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &5569359501729395037 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5569359501729395026} + 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_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 80, y: 0} + m_Pivot: {x: 0, y: 1} +--- !u!222 &5569359501729395039 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5569359501729395026} + m_CullTransparentMesh: 1 +--- !u!114 &5569359501729395036 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5569359501729395026} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83e7715acbfae1d4b84414c13d03ed3f, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: Key 1.0 + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 2b12354fb2d86744887c3e4bfee63986, type: 2} + m_sharedMaterial: {fileID: -3021868053195457599, guid: 2b12354fb2d86744887c3e4bfee63986, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4294967295 + m_fontColor: {r: 1, g: 1, b: 1, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 12 + m_fontSizeBase: 12 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 0 + m_fontSizeMax: 0 + m_fontStyle: 0 + m_HorizontalAlignment: 1 + m_VerticalAlignment: 256 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_TextWrappingMode: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_parseCtrlCharacters: 0 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!114 &8105243158765966554 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5569359501729395026} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c03870a7d4386e846be005a0ac36e987, type: 3} + m_Name: + m_EditorClassIdentifier: + m_shader: {fileID: 0} +--- !u!114 &-3940543153975910597 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5569359501729395026} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d1b90ac529732a34e97c569ec13f5756, type: 3} + m_Name: + m_EditorClassIdentifier: + m_text: {fileID: 8105243158765966554} diff --git a/Assets/Prefabs/UI/Property.prefab.meta b/Assets/Prefabs/UI/Property.prefab.meta new file mode 100644 index 0000000..aa1b52e --- /dev/null +++ b/Assets/Prefabs/UI/Property.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: b19e4e6833de5764e9d131bcc9efb4c1 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources.meta b/Assets/Resources.meta new file mode 100644 index 0000000..4ecd22f --- /dev/null +++ b/Assets/Resources.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0c2d48e0a037ab2479a705e173e00fb7 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/TMP Settings.asset b/Assets/Resources/TMP Settings.asset new file mode 100644 index 0000000..f9f4984 --- /dev/null +++ b/Assets/Resources/TMP Settings.asset @@ -0,0 +1,46 @@ +%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: 11500000, guid: fab78ea2d673edc40a6dd404991a3764, type: 3} + m_Name: TMP Settings + m_EditorClassIdentifier: + m_TextWrappingMode: 1 + m_enableKerning: 1 + m_enableExtraPadding: 0 + m_enableTintAllSprites: 0 + m_enableParseEscapeCharacters: 0 + m_EnableRaycastTarget: 0 + m_GetFontFeaturesAtRuntime: 1 + m_missingGlyphCharacter: 0 + m_ClearDynamicDataOnBuild: 1 + m_warningsDisabled: 0 + m_defaultFontAsset: {fileID: 11400000, guid: 2b12354fb2d86744887c3e4bfee63986, type: 2} + m_defaultFontAssetPath: + m_defaultFontSize: 14 + m_defaultAutoSizeMinRatio: 0 + m_defaultAutoSizeMaxRatio: 0 + m_defaultTextMeshProTextContainerSize: {x: 0, y: 0} + m_defaultTextMeshProUITextContainerSize: {x: 0, y: 0} + m_autoSizeTextContainer: 0 + m_IsTextObjectScaleStatic: 0 + m_fallbackFontAssets: [] + m_matchMaterialPreset: 0 + m_HideSubTextObjects: 1 + m_defaultSpriteAsset: {fileID: 0} + m_defaultSpriteAssetPath: + m_enableEmojiSupport: 0 + m_MissingCharacterSpriteUnicode: 0 + m_defaultColorGradientPresetsPath: + m_defaultStyleSheet: {fileID: 0} + m_StyleSheetsResourcePath: + m_leadingCharacters: {fileID: 4900000, guid: d82c1b31c7e74239bff1220585707d2b, type: 3} + m_followingCharacters: {fileID: 4900000, guid: fade42e8bc714b018fac513c043d323b, type: 3} + m_UseModernHangulLineBreakingRules: 0 diff --git a/Assets/Resources/TMP Settings.asset.meta b/Assets/Resources/TMP Settings.asset.meta new file mode 100644 index 0000000..efed039 --- /dev/null +++ b/Assets/Resources/TMP Settings.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4972abff193472e4bbef2dd0ec07b55e +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/TextMesh Pro.meta b/Assets/Resources/TextMesh Pro.meta new file mode 100644 index 0000000..5fdff97 --- /dev/null +++ b/Assets/Resources/TextMesh Pro.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f392c542024420b42905557893d859b1 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/TextMesh Pro/Fonts.meta b/Assets/Resources/TextMesh Pro/Fonts.meta new file mode 100644 index 0000000..6cc1890 --- /dev/null +++ b/Assets/Resources/TextMesh Pro/Fonts.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1a008d976abb5b24aa36a8a000d9ebb6 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/TextMesh Pro/Fonts/NotoSans-VariableFont_wdth,wght SDF.asset b/Assets/Resources/TextMesh Pro/Fonts/NotoSans-VariableFont_wdth,wght SDF.asset new file mode 100644 index 0000000..ca3e787 --- /dev/null +++ b/Assets/Resources/TextMesh Pro/Fonts/NotoSans-VariableFont_wdth,wght SDF.asset @@ -0,0 +1,497 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &-3021868053195457599 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: NotoSans-VariableFont_wdth,wght Atlas Material + m_Shader: {fileID: 4800000, guid: 68e6db2ebdc24f95958faec2be5558d6, type: 3} + m_ValidKeywords: [] + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _Cube: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _FaceTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 4318944087442446991} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OutlineTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - _Ambient: 0.5 + - _Bevel: 0.5 + - _BevelClamp: 0 + - _BevelOffset: 0 + - _BevelRoundness: 0 + - _BevelWidth: 0 + - _BumpFace: 0 + - _BumpOutline: 0 + - _ColorMask: 15 + - _CullMode: 0 + - _Diffuse: 0.5 + - _FaceDilate: 0 + - _FaceUVSpeedX: 0 + - _FaceUVSpeedY: 0 + - _GlowInner: 0.05 + - _GlowOffset: 0 + - _GlowOuter: 0.05 + - _GlowPower: 0.75 + - _GradientScale: 10 + - _LightAngle: 3.1416 + - _MaskSoftnessX: 0 + - _MaskSoftnessY: 0 + - _OutlineSoftness: 0 + - _OutlineUVSpeedX: 0 + - _OutlineUVSpeedY: 0 + - _OutlineWidth: 0 + - _PerspectiveFilter: 0.875 + - _Reflectivity: 10 + - _ScaleRatioA: 0.9 + - _ScaleRatioB: 0.73125 + - _ScaleRatioC: 0.73125 + - _ScaleX: 1 + - _ScaleY: 1 + - _ShaderFlags: 0 + - _Sharpness: 0 + - _SpecularPower: 2 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _TextureHeight: 1024 + - _TextureWidth: 1024 + - _UnderlayDilate: 0 + - _UnderlayOffsetX: 0 + - _UnderlayOffsetY: 0 + - _UnderlaySoftness: 0 + - _VertexOffsetX: 0 + - _VertexOffsetY: 0 + - _WeightBold: 0.75 + - _WeightNormal: 0 + m_Colors: + - _ClipRect: {r: -32767, g: -32767, b: 32767, a: 32767} + - _EnvMatrixRotation: {r: 0, g: 0, b: 0, a: 0} + - _FaceColor: {r: 1, g: 1, b: 1, a: 1} + - _GlowColor: {r: 0, g: 1, b: 0, a: 0.5} + - _MaskCoord: {r: 0, g: 0, b: 32767, a: 32767} + - _OutlineColor: {r: 0, g: 0, b: 0, a: 1} + - _ReflectFaceColor: {r: 0, g: 0, b: 0, a: 1} + - _ReflectOutlineColor: {r: 0, g: 0, b: 0, a: 1} + - _SpecularColor: {r: 1, g: 1, b: 1, a: 1} + - _UnderlayColor: {r: 0, g: 0, b: 0, a: 0.5} + m_BuildTextureStacks: [] +--- !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: 19001, guid: 0000000000000000e000000000000000, type: 0} + m_Name: NotoSans-VariableFont_wdth,wght SDF + m_EditorClassIdentifier: + m_Version: 1.1.0 + m_Material: {fileID: -3021868053195457599} + m_SourceFontFileGUID: 35400ee909f32d94f9901006d051135c + m_SourceFontFile: {fileID: 12800000, guid: 35400ee909f32d94f9901006d051135c, type: 3} + m_AtlasPopulationMode: 1 + InternalDynamicOS: 0 + m_FaceInfo: + m_FaceIndex: 0 + m_FamilyName: Noto Sans + m_StyleName: Regular + m_PointSize: 90 + m_Scale: 1 + m_UnitsPerEM: 1000 + m_LineHeight: 122.58 + m_AscentLine: 96.21001 + m_CapLine: 65 + m_MeanLine: 49 + m_Baseline: 0 + m_DescentLine: -26.37 + m_SuperscriptOffset: 96.21001 + m_SuperscriptSize: 0.5 + m_SubscriptOffset: -26.37 + m_SubscriptSize: 0.5 + m_UnderlineOffset: -11.25 + m_UnderlineThickness: 4.5 + m_StrikethroughOffset: 19.6 + m_StrikethroughThickness: 4.5 + m_TabWidth: 23 + m_FontWeightTable: + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + m_GlyphTable: + - m_Index: 526 + m_Metrics: + m_Width: 58.21875 + m_Height: 12.15625 + m_HorizontalBearingX: 6.484375 + m_HorizontalBearingY: 10.890625 + m_HorizontalAdvance: 71.1875 + m_GlyphRect: + m_X: 10 + m_Y: 10 + m_Width: 59 + m_Height: 13 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 66 + m_Metrics: + m_Width: 40.328125 + m_Height: 5.765625 + m_HorizontalBearingX: -0.1875 + m_HorizontalBearingY: -8.09375 + m_HorizontalAdvance: 39.953125 + m_GlyphRect: + m_X: 88 + m_Y: 10 + m_Width: 42 + m_Height: 6 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 22 + m_Metrics: + m_Width: 42.296875 + m_Height: 66.0625 + m_HorizontalBearingX: 4.046875 + m_HorizontalBearingY: 65.15625 + m_HorizontalAdvance: 51.484375 + m_GlyphRect: + m_X: 149 + m_Y: 10 + m_Width: 43 + m_Height: 67 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 23 + m_Metrics: + m_Width: 47.796875 + m_Height: 64.625 + m_HorizontalBearingX: 1.890625 + m_HorizontalBearingY: 64.625 + m_HorizontalAdvance: 51.484375 + m_GlyphRect: + m_X: 10 + m_Y: 42 + m_Width: 49 + m_Height: 65 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 24 + m_Metrics: + m_Width: 40.671875 + m_Height: 65.171875 + m_HorizontalBearingX: 5.671875 + m_HorizontalBearingY: 64.265625 + m_HorizontalAdvance: 51.484375 + m_GlyphRect: + m_X: 88 + m_Y: 35 + m_Width: 42 + m_Height: 66 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 1167 + m_Metrics: + m_Width: 20.515625 + m_Height: 5.40625 + m_HorizontalBearingX: 2.703125 + m_HorizontalBearingY: 29.796875 + m_HorizontalAdvance: 25.921875 + m_GlyphRect: + m_X: 211 + m_Y: 10 + m_Width: 22 + m_Height: 6 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 1166 + m_Metrics: + m_Width: 18.90625 + m_Height: 18 + m_HorizontalBearingX: 2.703125 + m_HorizontalBearingY: 36.1875 + m_HorizontalAdvance: 24.296875 + m_GlyphRect: + m_X: 252 + m_Y: 10 + m_Width: 20 + m_Height: 19 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 25 + m_Metrics: + m_Width: 42.296875 + m_Height: 66.0625 + m_HorizontalBearingX: 4.953125 + m_HorizontalBearingY: 65.15625 + m_HorizontalAdvance: 51.484375 + m_GlyphRect: + m_X: 291 + m_Y: 10 + m_Width: 44 + m_Height: 67 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 26 + m_Metrics: + m_Width: 43.109375 + m_Height: 64.265625 + m_HorizontalBearingX: 3.953125 + m_HorizontalBearingY: 64.265625 + m_HorizontalAdvance: 51.484375 + m_GlyphRect: + m_X: 211 + m_Y: 48 + m_Width: 45 + m_Height: 65 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + m_CharacterTable: + - m_ElementType: 1 + m_Unicode: 8230 + m_GlyphIndex: 526 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 95 + m_GlyphIndex: 66 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 51 + m_GlyphIndex: 22 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 52 + m_GlyphIndex: 23 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 53 + m_GlyphIndex: 24 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 727 + m_GlyphIndex: 1167 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 726 + m_GlyphIndex: 1166 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 54 + m_GlyphIndex: 25 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 55 + m_GlyphIndex: 26 + m_Scale: 1 + m_AtlasTextures: + - {fileID: 4318944087442446991} + m_AtlasTextureIndex: 0 + m_IsMultiAtlasTexturesEnabled: 0 + m_ClearDynamicDataOnBuild: 1 + m_AtlasWidth: 1024 + m_AtlasHeight: 1024 + m_AtlasPadding: 9 + m_AtlasRenderMode: 4165 + m_UsedGlyphRects: + - m_X: 0 + m_Y: 0 + m_Width: 78 + m_Height: 32 + - m_X: 78 + m_Y: 0 + m_Width: 61 + m_Height: 25 + - m_X: 139 + m_Y: 0 + m_Width: 62 + m_Height: 86 + - m_X: 0 + m_Y: 32 + m_Width: 68 + m_Height: 84 + - m_X: 78 + m_Y: 25 + m_Width: 61 + m_Height: 85 + - m_X: 201 + m_Y: 0 + m_Width: 41 + m_Height: 25 + - m_X: 242 + m_Y: 0 + m_Width: 39 + m_Height: 38 + - m_X: 281 + m_Y: 0 + m_Width: 63 + m_Height: 86 + - m_X: 201 + m_Y: 38 + m_Width: 64 + m_Height: 84 + m_FreeGlyphRects: + - m_X: 68 + m_Y: 32 + m_Width: 10 + m_Height: 991 + - m_X: 344 + m_Y: 0 + m_Width: 679 + m_Height: 1023 + - m_X: 0 + m_Y: 122 + m_Width: 1023 + m_Height: 901 + - m_X: 0 + m_Y: 116 + m_Width: 201 + m_Height: 907 + - m_X: 68 + m_Y: 110 + m_Width: 133 + m_Height: 913 + - m_X: 139 + m_Y: 86 + m_Width: 62 + m_Height: 937 + - m_X: 265 + m_Y: 86 + m_Width: 758 + m_Height: 937 + - m_X: 201 + m_Y: 25 + m_Width: 41 + m_Height: 13 + - m_X: 265 + m_Y: 38 + m_Width: 16 + m_Height: 985 + m_FontFeatureTable: + m_GlyphPairAdjustmentRecords: [] + m_FallbackFontAssetTable: [] + m_fontAssetCreationEditorSettings: + sourceFontFileGUID: 35400ee909f32d94f9901006d051135c + faceIndex: 0 + pointSizeSamplingMode: 0 + pointSize: 90 + padding: 9 + packingMode: 0 + atlasWidth: 1024 + atlasHeight: 1024 + characterSetSelectionMode: 7 + characterSequence: + referencedFontAssetGUID: + referencedTextAssetGUID: + fontStyle: 0 + fontStyleModifier: 0 + renderMode: 4165 + includeFontFeatures: 0 + m_RegularStyleWeight: 0 + m_RegularStyleSpacing: 0 + m_BoldStyleWeight: 0.75 + m_BoldStyleSpacing: 7 + m_ItalicStyleSlant: 35 + m_TabMultiple: 10 +--- !u!28 &4318944087442446991 +Texture2D: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: NotoSans-VariableFont_wdth,wght Atlas + m_ImageContentsHash: + serializedVersion: 2 + Hash: 00000000000000000000000000000000 + m_ForcedFallbackFormat: 4 + m_DownscaleFallback: 0 + m_IsAlphaChannelOptional: 0 + serializedVersion: 2 + m_Width: 1024 + m_Height: 1024 + m_CompleteImageSize: 1048576 + m_MipsStripped: 0 + m_TextureFormat: 1 + m_MipCount: 1 + m_IsReadable: 1 + m_IsPreProcessed: 0 + m_IgnoreMasterTextureLimit: 0 + m_StreamingMipmaps: 0 + m_StreamingMipmapsPriority: 0 + m_VTOnly: 0 + m_AlphaIsTransparency: 0 + m_ImageCount: 1 + m_TextureDimension: 2 + m_TextureSettings: + serializedVersion: 2 + m_FilterMode: 1 + m_Aniso: 1 + m_MipBias: 0 + m_WrapU: 0 + m_WrapV: 0 + m_WrapW: 0 + m_LightmapFormat: 0 + m_ColorSpace: 0 + m_PlatformBlob: + image data: 1048576 + _typelessdata: 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000105070709090707050100000000000000000000000000000305060809090706030000000000000000000000000000010407070909070705010000000000000000000000000000000000020608081111111111111111111111111111111111111111111111111111111111111111111111111111111108070502000000000000000000000000000000000000000000030607080a0c0d0f1010111112121111100f0d0c0a070704010000000000000000000000000000000000000000000000000000000000030608090e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e080705020000000000000000000000000000000000000004090c0e0f1111111111080705020000000000000000000000000000000000000000000000000000000000000000000000000406070a0d0f1011121211100e0c0a070604000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080d11131416161413110d080200000000000000000000060b0f12131516151312100c060000000000000000000002080d11131416161413110d08020000000000000000000000000003090f1214151e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1514120e09030000000000000000000000000000000306060b1012131517181a1c1d1d1e1e1f1e1e1d1d1c1a19171413110d080603000000000000000000000000000000000000000000000000040a0f1215151b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1514120e090300000000000000000000000000000002090f15181b1c1e1e1e1e1e1414110e09020000000000000000000000000000000000000000000000000000000000000003070c10131416191b1d1e1f1e1e1d1b19171413100c0703000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030a0f13191d2021232321201d19130f0a04000000000000020a11171b1f20222322201f1c17110c0701000000000003090e13191d2021232321201e19130f0a0400000000000000000000060e151a1f21222b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b21211e1a140d05000000000000000000000001050a0f1315171c1f202224252728292a2a2b2b2b2b2a2a2827252321201d191312100b06000000000000000000000000000000000000000000060e151b1f2122282828282828282828282828282828282828282822211e1a140d0600000000000000000000000000030c141b202527282a2a2a2a2a21201e19140d0500000000000000000000000000000000000000000000000000000000060b0f12181c1f202326282a2b2b2b2a2a282623201f1d18120f0b06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060e151a1e252a2d2e302f2e2d29251e1b150e0700000000090b141b22272b2d2f302f2d2c28231c18120b03000000060e141a1e24292c2d2f302e2d2a251e1b160f070000000000000000060f1820262b2e2f383838383838383838383838383838383838383838383838383838383838383838383838383838382e2d2a251f170f05000000000000000002080d11151b1f2123282b2d2f30323435363737383838373736353432302d2c2924201f1c17110d0802000000000000000000000000000000000006101820262b2e2f34343434343434343434343434343434343434342e2d2a261f180f060000000000000000000000020c151e252c31343537373737372e2d2a251f170e0500000000000000000000000000000000000000000000000000020a11171b1f23292c2d3033353737383837363533302d2c29241f1c17110a02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070f1820262b3036393a3c3c3a3935302b262018100800020b121b1d262d3337393b3c3c3a38342e29231d150d0300060f181f262a3035393a3c3c3a3936302c2721191008000000000000030e18212a31373a3b444444444444444444444444444444444444444444444444444444444444444444444444444444443b3a36312921170d03000000000000050d14191e20262b2e2e34383a3b3d3f404243434444454544444342403f3d3a3935302d2b28231c19140d08010000000000000000000000000000040e18222a31373a3c41414141414141414141414141414141414141413b3a36312921180d030000000000000000000009141e2730373d414244444444443b3a36302920170d020000000000000000000000000000000000000000000002080b141b22272b2f34383a3d4042434445454443413f3d3a38352f2b28221c140b0903000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071019222a31373a41464749494746413a37322a221a11080b141d252d2f383f444648494846443f38342f271f150d061018212a31363a41454749494746413a38322b221a120800000000000915202a333c434748515151515151515151515151515151515151515151515151515151515151515151515151515151514846423b33291f140900000000020b0e171e252a2d32373b3c3f4446484a4b4d4f5050515152515150504f4d4c4a4745413d3a38342e2a251e19130c04000000000000000000000000000a15202a343c4347484e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4846423b33291f1409000000000000000000040f1b25303941484d4f51515151514746423b32291f1409000000000000000000000000000000000000000000050c13191d262d333739404547494c4e5051525151504e4c4a4745403938332d261d1a140d0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020b19222b343c43474c5254565654524c47433c342b231a0d111d262f373f4149505355565553504a45403931271f150e18222a333b42464c5254565654524c48433d342c241a0d04000000020f1a26313c464e53555e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e54534d453b31251a0e020000010b141d20293036393c4347494a50535557585a5b5c5d5d5e5e5e5e5d5d5b5a585654524c4a46443f38363029241e160d070000000000000000000000030f1b26313c464e53555b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b55534d453b31261a0e0200000000000000020615202c37414b53595b5d5d5d5d5d54524d443b3025190e0400000000000000000000000000000000000000070e171e252a2f383f44464b515356595b5d5e5e5e5d5d5b595653514b46443f382f2a251f170f070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a141d2b343d464e53565e616362615e56534e463d352b1f1519232f38414951535b60626362605c54514b433931271d15202a343c454d53565d606263615e56544e463e362c20160c01000006121f2b37434e585f626b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b615e574d42362a1e1205000008131d262f323b4146474e5355545c606263656768696a6a6b6b6b6a6a6968676563605d565653504a46413b352f281f19100a0100000000000000000006121f2b37434e585f626767676767676767676767676767676767676767615f574d42362a1e1205000000000003090e121425313d48535d65686a6a6a6a6a615e564d42362a1e14100b0500000000000000000000000000000000081019202930363e41495053555c606366686a6a6b6b6a69686663605d5553504a423e363029211911080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111b262f3d464e585f62686d6f6f6d68625f584f473d31271d212b35414a535b62656c6e6f6f6d66605c554b43392f241b26313c464e575f61686d6f6f6d6862605850483e32281e130800000814212e3a47535f6a6e777777777777777777777777777777777777777777777777777777777777777777777777777777776e695e53463a2d21140700030e1a242f3841444c5254585f6266666d6e70727375767677777878777776757372706d686763605c54524c45413a312b231c130a0100000000000000000815212e3a47535f6a6f74747474747474747474747474747474747474746e695f53463a2d21140700000000060e151a1e212234414d59656f7577777777776e695e52463a2d23201c171008000000000000000000000000000008111a222a323a41464f535b6063676d7073757677787877767472706d6764605b545046423b332b231a11080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b17222d38414e58606a6e767a7c7c7a766f6a60594f43392f2427333d47535c646d72787b7c7b79736d675d554b4035291f2b37434e585f696e757a7c7c7a766f6a615a50443a2f24190d01000815222f3b4855626e7c848484848484848484848484848484848484848484848484848484848484848484848484848484847b6e6154483b2e2115080008141f2b36414a52565e61666a6f7376797b7d7e808283838484858484838382807f7d7a7774706d66615e56524c433d352d251c130a01000000000000000915222f3c4855626f7c81818181818181818181818181818181818181817b6e6155483b2e221508000000060f1820262b2e2f35424f5b68758183848484837b6e6154473b31302d28221a110800000000000000000000000007111a232b343c444c525961656c7075797c7f81838485848483817f7d7975716c66615a524d453d352c231a100700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030f1b27333f4953606a6f7c8287898986827c706b60554b4035292c38444f59646e747f848889888580796d675d5145392c212e3a47535f6a6f7b8286898987837c716c61564c4135291d1104000916222f3c4955626f7c889191919191919191919191919191919191919191919191919191919191919191919191919191887b6e6155483b2e221508000b1724303c47525c64686e72777c7f8385888a8b8d8e8f90909191919190908e8d8b898684817d79736e68605d564f473f372e251c1309000000000000000a1724303d4a5763707d8a8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e897c6f6256493c2f2316090000030e18212a31373a3b4044515d6a778390909090877b6e615448403d3c39332c231a100500000000000000000000050f19232b353d464e565e616b70787d8186898c8e9091919190908e8c8985827d78716c615e574f473e362c22190f0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005121f2b3744505b656f7c868f939a9a938f877d70675d5145382c2f3c4854606b74808b91969697928d83796d6053473b302b37424d57626f7c858f9399969490877e71685d5245392c201307000916222f3c4955626f7c88959e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e94887b6e6155483b2e221508000d1a26333f4c58646e747a7f84888c8f929896989a9b9c9d9d9e9e9e9d9d9c9b9a989a93918e8984807a736d686059514940372e251b10060000000000000a1724303d4a5763707d8a969a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a95897c6f6256493c2f23160900000915202a333c4247484d4d515d6a7784909d9d94877b6e61544d4d4a49443e362c22170b000000000000000000030c17212b353d474f585f686d757d838a8e9298999b9d9d9e9e9d9c9b9998928f8a847e766e69605950483e342b21170d0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000613202d394653606c778491989fa4a49f999185796d6053473a2d303d4a5663707d89929ea1a8a29f958d807366574d42362e3a47535f69768390979fa4a69f9992857a6d6054473a2d211407000916222f3c4955626f7c88959e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e94887b6e6155483b2e221508000e1b2734414e5a677480868c9196999c9fa2aaa5a6a8a9a9aaaaa9a9aaaaa9a8a6aca49f9d9a97918d86807a6f6b635b514940372d22180b0200000000000a1724303d4a5763707d8a969d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d95897c6f6256493c2f23160900020e1a26313c454d53555959595d6a7784909da194877b6e61595959575550483e33281c100400000000000000000b151e29333d474f59606a6f7a818a90959b9fa3aaa8a9aaa9aaaaa9a7aaa29f9b95918a827b706b615a50463d33291f140900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000916232f3c4956626f7c8995a0aaafafaba1978a7d7164574a3e3135424e5b6875818e9ba5adb2ada79e918578695e52463a2f3b4855626e7b88959fa9afb0aba2978b7e7165584b3e3225180b000916222f3c4955626f7c889191919191919191919191919191919191919191919191919191919191919191919191919191887b6e6155483b2e22150800131f2c3946525f6c798592989da0a8a9acaba9a6a4a9a29f9d9d9d9d9d9e9fa2aaa5a8acaaa9a19e98928d847d726d635b51493f342a1d140a00000000000a1724303d4a5763707d8a909090909090909090909090909090909090897c6f6256493c2f2316090006121e2b37424d575f62666666666a7784909da194877b6e6666666664615a5044392d2014080000000000000007121d27303b454f59606b707c848e939da0a7acaaaaa29f9d9d9d9e9fa3ababaca8a09d948f857d706c61594f453b30251a0b02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1825323f4b5865727e8b98a7b1bbbbb3a9998d8073665a4d40333744515e6a7784919daab7bdb9ada197877b6e6154483b313e4b5764717e8a97a7b1bbbdb3a99a8d8174675a4e4134271b0e000915222f3c4855626f7c858585858585858585858585858585858585858585858585858585858585858585858585858585857b6e6154483b2e21150800131f2c3946525f6c7985929faaacaaaaa29f9c9997959792919090909091929896989c9fa3aaadaaa29f9691877f736d635b51463c2f261b110600000000091623303c4956636f7d83838383838383838383838383838383838383837c6f6255483c2f221509000814212e3a47535f696e73737373737783909da194877b7373737373706c6155493c3023160a000000000000000c18232e39424d57606b707d8691969ea5aca7a09d9898929190909292999a9fa2a9aca69f9792867e706b60574d42362a1d140a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d192633404c5966737f8c99a6b2bfc1b4a79a8e8174675b4e41343845525f6b7885929eabb8c5beb3a995887c6f6255493c323f4c5865727f8b98a5b2bec1b5a89b8e8275685b4f4235281c0f000815212e3a47535f6a6f787878787878787878787878787878787878787878787878787878787878787878787878787878786e695e53463a2d21140700131f2c3946525f6c7985929fa8a09e9a98928f8d8a8886858483838383848587898c8f92989ea1a9aea8a199928c7f736d62584e41382d22170b000000000915222f3b4854606b6f77777777777777777777777777777777777777776f6a5f53473a2e211508000815222f3b4855626e7b80808080808085919ea79a8d8080808080807e7064574a3d3124170a00000000000004101c2834404b545e696f7d869298a1a8aaa29f95918c888584838485868a8d92979fa3aba9a29892877d6f695e52463e2f261b11060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1926333f4c5966727f8c99a5b2bfc0b4a79a8d8174675a4e41343845525e6b7885919eabb8c4bcb1a795887b6f6255483c323f4b5865727e8b98abb5c0c1b5a89b8e8275685b4f4235281c0f0006121f2b37434e585f626b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b615e574d42362a1e120500131f2c3946525f6c7985929e9996918d898582807d7b7a78777776767777797a7c7f82868b91969da4adaba39f918b7f726a5f53493f33271b0f0300000007131f2c38434f5960636a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a625f584e43372b1f1206000a1724303d4a5763707d8a8c8c8c8c8c9197a1a99d928d8c8c8c8c8c8174675b4e4134281b0e0000000000020d17202c3845515c666e7b859298a2aaa79f98928b847f7b79777677787a7d80858d9299a1a9aaa39991857b6e615a5041382d22170b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1825313e4b5864717e8b97a6b0b7b7b1a7998c7f7366594c40333744505d6a7783909dabb4b7b6aca095877a6d6154473a313d4a5764707d8a99a4afb7b7b2a89a8d8073675a4d4034271a0d00030f1a26313c464e53555e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e54534d453b31251a0e0200131f2c3946525f6c798592928d8884807d797673716f6d676a6a6a6a6a6b686d6f72757a7f848d929ba3adafa49f92867c6f655b5044372b1f150a000000030f1b27323d474f54565d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d55534e463c31261b0f03000a1724303d4a5763707d8a96999999999ea1a9aea49d9a999999998e8174675b4e4134281b0e000000000009141f2a36424d57606d79839097a2aaa79f9590867e78726e6c656a6a676d70747a80879297a1a9aba1978f82756c6153493f33271b0f0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000815222e3b4855616e7b88949ea7aaaaa79f95897c706356493d3034414d5a6774808d99a2aaaaaca49d918477685e5246392e3b4754616e7a87939fa6aaaaa8a0968a7e7064574a3d3124170a00000a15202a343c434748525252525252525252525252525252525252525252525252525252525252525252525252525252524846423b33291f14090000131f2c3946525f6c79868b85807b7774706d66666462605d555d5d5d5d565e616365676d7279808c919ba4aeaea3989083786c6053463c32261b0f030000000a16212b353d43484950505050505050505050505050505050505050504847433c342a20150a00000a1724303d4a5763707d8a969e9e9e9e9fa3abb3a9a19e9e9e9e9a8e8174675b4e4134281b0e00000000020e1a25303a46535e69737f8c959fa9a89f9590837b716c6561605b53555d6063686d737d859297a1aca99e948a7d70655b5044372b1f130800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000814212d3a47535f6975828f959c9e9d9c959083786c605346392d2f3b4855626e7b8792989d9e9d9a938b7e7164564c41352d3946525e6875818e949b9d9e9c969184786d6053463a2d2013070000030e18222a31373a3c454545454545454545454545454545454545454545454545454545454545454545454545454545453b3a36312921170d030000101d293643505c6976827e79736e696763605c54575553514b505050504c525456555d60676d747f8c929ca7b1aaa0958a7d7164584e43372b1f1206000000040f19232b32383b3c44444444444444444444444444444444444444443c3a37312a22180e0300000a1724303d4a5763707d8a91919191919299a3ada19791919191918e8174675b4e4134281b0e0000000005111e2a36424d57616e7b86929fa7aba0969083796e69605b535350494b5153565d616b6f7b85929aa4afa69e9184786c6053463a2f24190d010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121e2b37424d57616d7a838b8f91918f8b837b6e655b5044372b2e3a47535f6a717e868d9091908d8780736c6256443a302a36414c56606d79828a8f91918f8b847b6e665c5044382c1f120600000006101820262b2e2f383838383838383838383838383838383838383838383838383838383838383838383838383838382e2d2a251f170f050000000f1c2835424e5a667076716d67625f575653514a4a4847454044434344414647494c51555d606d73808d95a0abb1a79d9083776a5f53473b2e2115060000000007101921272c2f3037373737373737373737373737373737373737372f2e2b26201810060000000a1623303d495663707d84858585858487929fab9e918585858585848073675a4d4034271a0d000000000714202d3a46525e6974818e98a2aea39991847a6d675f57504946443f4045474c52596069707d88939fabaca0968a7d7063564c4135291d110400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020e1a26313c46525e686d787e828484827e796e695e53493f33272b37424e57616c717b80838483817c736e635a5045322825303b45515d676d787e828484827e796e695f544a3f34281c100300000000060e151a1f21222b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b21211e1a140d05000000000d1926323e49545e666964605c55534d494644403e3c3a38352f37373036393a3c41454b515b606c7783909da7b1aca095887c6f6255483c2e23170b0000000000070f161b1f22232a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a22211f1b150e06000000000916222f3c4854606b7078787878787883909da194877b7878787878736e63584b3f3226190d000000030f1b27333f4953616e7b86929faaa99f92877c6f685e554d443f39373335393a41464f57616b74808d99a4afa89c8f8276685d5245392c201307000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009151f2a36414c565e666d7175777775716d665e574d41382d2226313c45505a61696e73767777746f6a635c52483f34201e2935414c555d666c7175777776726d675f574d42382e23170c000000000000030a0f1215151f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1514120e090300000000000a16212d38424c545a5c5853514b47423d3a38342e2f2d2c29242a2a252a2d2e2f35394045505b65707d89959fabb1a7998d807366544a3f34281c10030000000000040a0f1315161d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1515120f0a0300000000000713202c38444f5960636b6b6b6b6b7784909da194877b6e6b6b6b6b67635c52473b2f23170a00000005121f2b3744505b6573808d99a3ada1978d80746a5f564c433c332d2b27292c30353d454f59616e7b87939facac9f92867a6d6054473a2d2114070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030d1925303a444c545c6064696b6a6965605c544d453b2f261b202a333e4850575e61676a6b6a67625f58524a40362d2219242f3a434c545b6064686a6b6965605d554d453c30261c110600000000000000000306080912121212121212121212121212121212121212121212121212121212121212121212121212121212080705020000000000000005101b26313a42494e504b4745403937312d2c282322201f1d181d1d191d202124292f353f4953606b7783909daab6a99d908376665c5044382b1f120600000000000000030709091111111111111111111111111111111111111111090806030000000000000004101c27333d474f54565e5e5e5e6a7784909da194877b6e615e5e5e5a58524a40362a1f13070000000613202d394653606c7884919eabab9e92857a6d60584e443a3127221f1b1d1f2429333e46535f6975828f9ca8afa3998a7d7164574a3e3124170800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008131e28323a424a5053585c5e5e5c5853514b423b33291d1418212c363e454d53545a5d5e5d5a55544e4640382e241b131e28313a424a5053575c5e5e5c5853514b433c332a1e150a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a151f2831383e42433e3a38342f2b26201f1c18151413100c07080d111314191d242d38414f596673808c99a6b3ac9f9285796d6053463a2d201307000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b16212b353d4448495252525d6a7784909da194877b6e615452524d4b4740382e24190e020000000a1623303d495663707c8996a1ada79a8d8073675d51463c32281f17120f101319212a36424d5764717e8a97a9b3ab9a8e8174675b4e413025190d010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020c16202830383f44464b4f51514f4b46454039302921170b0f1a242c333b4246484d5051504e4947433c342e261c120c161f282f383f44464b4f51514f4b47454039312a21180c03000000000000000000000000000000000001050707090b0d0f10101112121111100f0d0b0907060300000000000000000000000000000000000000000000000000030d161f262d323536312d2c29231d1a1312100c07070604000000010507080d121b262f3d4956636f7c8996a2afaea298887b6e6255483b2f22150800000000000000000000000000000000000000000000000000000000000000000000000000000000000000050f19232b33383c3d4545515d6a778490959594877b6e61544845403f3b362e261c120800000005111d2935414c566773808d9aa8ab9f95887b6e62554c41342a20160d060304080f1a26313b4855626e7b8897a2ada99d9083766a564c4135291d1105000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050e161e262e34383a3e424444423e3a38342e271e170f0508121a212931363a3b40434444413c3b37322a221c140a040d161d262d3338393e424444433f3a38352f271f180f060000000000000000000000000000010507080d11131416181a1c1c1d1e1e1f1e1d1d1c1a18161312100c06040100000000000000000000000000000000000000000000040d151b2126282925201f1c18120e090604000000000000000000000000010a14212e3b4854616e7b8794aab4b4aa96897c6f6356493c30231609000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007111921272c2f303844515d6a778388888888877b6e6154483b34322f2a241c140a000000000713202d3946525d687783909daaaa9d908377695f53433a2f22180e05000000000913202d394653606c7985929fabab9f928578685e5246392d20130700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050c151c23282c2d3136383736322d2c28231d150c050000080f171f252a2d2e34373837342f2e2b262019100a0100040b141c22282b2d3135373836322d2c29241d150d060000000000000000000000000003080d111314191d202123252728292a2a2b2b2b2a2a28272523201f1c1713110d0802000000000000000000000000000000000000000000030a1016191c1d181413100c0701000000000000000000000000000000000713202d3a4653606d798698a2aeb0a3968a7d7063574a3d3024170a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070f161c2022232f3b4855626e7b7c7c7c7c7c786d6053463a2d20231f19120a02000000000714212e3a4754616d7a86939faca79a8d807467574d4231281e1006000000000005121f2b3744505b657683909da9ada297877a6d6154473a2e2114070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030a11171c1f2025292b2b2925201f1c18120b0300000000050d141a1e2121272a2b2a2722221f1b150e0700000000020a11171c1f2024292b2b2925201f1d18120b03000000000000000000000000060b0f13191d202125292d2e3031333536373738383837363533322f2d2c2823201d19130f0a04000000000000000000000000000000000000000000050a0d0f100b0706040000000000000000000000000000000000000006131f2c3845515c667985929facb0a3978a7d7064574a3d3124170a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050b101316212e3a47535f696e6f6f6f6f6f6d665c5145382c1f13130e080000000000000a1623303d495663707c899aa4afa4978a7e7164574a3e3124160c000000000000030f1b27333f49536976828f9ca9b3a994887b6e6155483b2e22150800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060c101213181c1e1e1c181313100c070000000000000003090e1214151a1d1e1d1b1615130f0a0400000000000000060b0f1213181c1e1e1c181413100c07010000000000000000000000020a11171b1f24292d2e3035393a3c3e4042434344454544444342403e3c3a38342e2c29241e1b150e090200000000000000000000000000000000000000000001030300000000000000000000000000000000000000000105070b14202d3a4653606d7986939facb5ab96897c706356493d3023160a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000407121e2b37424d575f626262626262605c544b4034281c100402000000000000000c1925323f4c5865727f8b98acb6ac95887b6e6255483b2f221508000000000000000b17222d424f5b6875828e9ba8afa295887c6f6255493c2f2216090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000306070b0f11110f0b0706040000000000000000000000020507080d1011110e0908060300000000000000000000000306060b0f1111100c07060400000000000000000000000000060b141b22272b3035393a3e414647494b4d4f4f505151525150504f4d4b4946443f3a3935302b26201a140d05000000000000000000000000000000000000000000000000000000000004060709090909090909090a0b080d1113181d262d3b4854616e7b879aa4afafa499887b6f6255483c2f22150900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020e1a26313c454d5355555555555553514b42392e23180c0000000000000000010e1b2734414e5a6774818d9aa7afa49a877a6d6154473a2e21140700000000000000061b2834414e5b6774818e9aa7afa296897c6f6356493c302316090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060f181d262d33373a4146474b4c525456585a5b5c5d5d5e5e5e5d5d5b5a585653504a4745413a37322a251f170e060000000000000000000000000000000000000000000000000000070c1013131616161616161616171719191d2024292f38424d5764717d8a97acb6ac9f93867a6d6054473a2d21140700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000915202a333c42474849494949494645403930271d12070000000000000000030f1c2936424f5c6975828f9ca8ac9f9386796d6053463a2d201307000000000000020e1b2835414e5b6874818e9ba7afa295897c6f6256493c2f2316090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004080a0b131313131313130a0a0804000000000000000000000000000000000000000000000000000000030e18212a2f383f44464c525458565e6163646668696a6a6b6b6b6a6968666562605c5454524c47433c3630292017110a0200000000000000000000000000000000000000000000030b12181c1f20222222222222232323242524292d2f353a4149525e6974818e9ba7b6ac9d908377675d5145392c2013060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030e18212a31373a3b3c3c3c3c3c3a38342e271e150b00000000000000000004111d2a3744505d6a7783909daaac9f928679685d5245392c20130700000000000003101c28343f4a546975828f9ca8b4aa95887b6e6255483b2f2215080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050c1114171720202020202020171614100b05000000000000000000000000000000000000000000000000000915202a333c41495053565d616468686d6f71737576767778787777767573716f6d6665605d56544e46423b3328231c140c020000000000000000000000000000000000000000030c151d23282c2d2f2f2f2f2f2f2f303031323035393a40454c535b616e7b86929facafa49a8d807367554c4135291d1104000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060f1820262b2e2f2f2f2f2f2f2d2c28231d150c0300000000000000000005121f2b3845525e6b7885919eabaea399877a6d6054473a2f24180f06000000000006121f2c3844505c667683909da9aea298877a6e6154473b2e211408000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000810171c2123242d2d2d2d2d2d2d2423201c1710080000000000000000000000000000000000000000000000020e1a26313c454e535b6063686d7175787a7c7e8082828384848584838382807e7c7975726d68625f58524d453e342e261e140b02000000000000000000000000000000000000000b151e272e34383a3c3c3c3c3c3c3c3c3d3e3f404146474b51565e656c76828f99a3aeab9f93877c6f6255483c2f24190d0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060e151a1e21222222222222201f1c18120b030000000000000000000006131f2c3946525f6c7985929facb5ab96897c7063554b4135292117110b060707070d16202d3a4653606d7985929facac9f9285796c605346392d20130600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008121a22282d30313939393939393931302d28221a11080000000000000000000000000000000000000000000006121e2b37424e575f656c70757a7e818487898b8d8e8f909091919190908e8d8b8985827f7a756f6a615e5750443f3830261d140a00000000000000000000000000000000000007121d27303940454649494949494949494a4a4c4d4c5254555d60686d77808d949fabaea3998f82756a5f53473a2e1e130800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003090e12141516161616161313100c0700000000000000000000000006121f2c3844515c667986939facb3a79a8d8074675d51453d3328221c1714131314181f2834404a54626f7c8898a2aeaa9d908377665b5044382b1f1206000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005101a242c33393c3e464646464646463d3c39332c231a10050000000000000000000000000000000000000000000814212e3a47535f6a6e787d82868b8e91969697999b9c9d9d9e9e9e9d9c9b999898928f8b86817c746e69615a504a42382f261c110600000000000000000000000000000000000c18232e39434b515355555555555556565657585a565d6164676d727a818d929da6ada59f92867c6f62584e43372b1f0c01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002060808090909090907060400000000000000000000000000000713202d3a4653606d798699a4afb8ab9e92857a6d60594f453c332d2822212020212329313a44515c66737f8c99aab4ab9b8e817468544a3f33281c0f0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c17222c363e45494a535353535353534a49443e362c22170b0000000000000000000000000000000000000000000815222f3b4855626e7c838a8f92999b9ea1a8a4a6a8a9a9aaabaaaaaaa9a8a6aaa29f9c98928e87817b716c605c544a42382d22170f0600000000000000000000000000000004101c2834404b555c6062626262626262636364656668686d7074797f858f939da4aca49c938b7f726a5f53463c31261b0f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714202d3a4753606d7a8693a0b5b9ada2978d80736b60574e443f38332d2d2d2d2e2f343b434d57606d7984919eabafa4998a7e7164574b3e2d22170b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111c28333e4850555760606060606060575550483e33281c100400000000000000000000000000000000000000000b1724313e4a5764717d8a959c9fa3ababaca9a6a4aba39f9e9e9e9e9ea2a9a4a7ababaaa39f9a938e867e746d665c544a3f332821180d03000000000000000000000000000006131f2c3845515c676d6f6f6f6f6f6f6f6f7071727375777a7d81858c92979ea5a8a19e928c81746d62584e43342a20150a000000000000000000000000000000000002070a0d0d131313131313131309080603000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d798699a3aebbb3a99f92877d6f696058504a443f3c3a3a3a3b3c40454c555e69717e8b97a1adac9f93877a6d6154473a2e21140600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000814212d3945505a61646c6c6c6c6c6c6c64615a5044392d20140800000000000000000000000000000000000000000b1724313e4a5764717d8a97a7acaaaaa29f9c9a9795999291919191929795979a9ea1a8aaaca49f98928a80786d665b50443f33291f140900000000000000000000000000000713202d3a4653606d797c7c7c7c7c7c7c7c7d7d7f808284868a8e92989ea1a9a19e96918a80776c605b51463c3222180e0400000000000000000000000000000000080e1317191a20202020202020201615130f0a04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121f2b3844505c667986929facb9b4aea39991857b6f6a605b54504a4847464647484b51565e676e7b85929fa9b0a69b8f8275685e5246392d20130700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1723303c4955616c7179797979797979706c6155493c3023160a00000000000000000000000000000000000000000b1724313e4a5764717d8a97a8a09e999892908d8b898786858484848586888a8d91969c9ea6acaaa29f928d81786c605a50453b31261a0e04000000000000000000000000000815222e3b4855616e7b8888888888888989898a8b8d8f91939a9b9fa29f9e9a96918b847e736c655b50493f342a201006000000000000000000000000000000020a12191f2326272d2d2d2d2d2d2d2d22211f1b150e070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003101c28343f4a5f6c7885929fabb4aaa29f9d9791847c726c66605b54555453535455555c60686e79829097a2adab9f94897c7063564c4135291d110500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1724313e4a5764717e868686868686867d7064574a3d3124170a00000000000000000000000000000000000000000b1724313e4a5764717d8a979b96918d898583807e7c7a7978787778787a7b7e8184898f949ea1a8aea49d938e81746c62574d42362a20150a000000000000000000000000000815222e3b4855616e7b8894959595959596969798999b9d9fa49c999a93918d89847f79706c605b53493f372d22180e000000000000000000000000000000000a141c242a2f323339393939393939392f2e2b2620181007000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b17232e45525e6b7885919eabaea2989290959691867f78706c666462606060616264676d727a8390949fa9aea3998f82766b6054443a3025190d0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1724313e4a5764717d8a93939393938a7d7064574a3d3124170a00000000000000000000000000000000000000000b1724313e4a5764717d8a928e8984807c797673716f6d6c656b6b6b676d6e7174787c828991969fa6aea59d938b7e71695f53463c32261b0f010000000000000000000000000815222e3b4855616e7b8894a1a2a2a2a2a2a3a4a5a6a8aaac9c918c898684807c78726d66615a504941382d251b100600000000000000000000000000000008121c262e363b3f4046464646464646463c3b37322a22180e04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061e2b3845515e6b7884919eabac9f928684909698928b837d7874716f6d6d6d6e6f7175797f8590959fa6afa59f92867b6e62594f4432281e13080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1724313e4a5764717d8a979f9f9f978a7d7064574a3d3124170a00000000000000000000000000000000000000000b1724313e4a5764717d8a86817c7773706d6667646261605b5e5e555d606264656c70757d8490949fa7afa59f92867b6e61584e43372b1e13080000000000000000000000000815222e3b4855616e7b8894a1a6a6a6a6a7a7a9aaacafb5a5998c7f7c7977746f6c66605c5450443f382f261b1309000000000000000000000000000000020e19242e3840474b4d53535353535353534947433c342a20150a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111d2a3744505d6a7783909daaab9f92857a8491999f95908a84817e7b7a79797a7b7e81858c9297a0a7afa59d938c7f726a5f53473d3220160c020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1724313e4a5764717d8a97a4aca3978a7d7064574a3d3124170a00000000000000000000000000000000000000000a1724313d4a5764707e817b756f6a6663605c54585654535049514b515355535b60636b707a8290959fa9aea2988f82756a5f54473a2f24190d0100000000000000000000000815222e3b4855616e7b88949a9a9a9a9a9a9b9c9e9fa3abab9f938783807b76706b615f5750483e332d261d140a0100000000000000000000000000000007131f2a36404a52585a606060606060606055534e463c32261b0f0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000030f1c2936424f5c6975828f9ca8aea29886797d879298a09d96918d8a8887868687888b8e92979ea1a9aba49f938e81746d62574e42352b210e04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1724313e4a5764717d8a97a4b0a3978a7d7064574a3d3124170a00000000000000000000000000000000000000000613202d394653606c78746e696260585653514b4b494746443f44404547484950535960686d79839097a2adaa9e93887c6f62554c4135291d110400000000000000000000000815222e3b4855616e7b888d8d8d8d8d8d8d8e8f919299999ea19993908c88837d766e69615a50483e352b20160c020000000000000000000000000000000a17232f3b47525c63666c6c6c6c6c6c6c6c625f584e43372b1f140900000000000000000000000000000000000000000000000000000000000000000000000000000000000000010e1b2734414e5a6774818d9aa7b4aa94887b707d8691979ea19e9a97959393939495979b9ea1a9aba7a099938c81786d605b51453c3123190f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010406070c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c1724313e4a5764717d8a97a4b0a3978a7d7064574a3d3124170a090704000000000000000000000000000000000005121f2b3744505b656c65615e57544e494645403e3c3a3937332f35383a3b3f44464f565d676e7b85929fa9b0a69b8f8275675d5145392c20130600000000000000000000000714212e3a4754616d7a808080808080808181838486898d91969d9f9d9994908a827b706c625a50473d32281e13080000000000000000000000000000000d1926323f4b58636e737979797979797979766a5f53473b30251a0e01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d192633404c5966737f8c99a6afa295897c6f707d858e939b9fa3aba2a0a0a0a1a2a4a8aba9a79f9d95908780776d665c51493f332a201107000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001070d101314191919191919191919191919191919191919191919191924313e4a5764717d8a97a4b0a3978a7d7064574a3d312419171614100b05000000000000000000000000000000030f1b27333f49535b605b53524d48433d3a38342e2f2e2d2b2724292c2d2d33373d434c555e69727f8b96a1adac9f92867a6d6054473a2d21140700000000000000000000000713202d3946525e686d73737373737373747476777a7c80848a90959fa39f9c948f857e716c62594f443a3025190d0200000000000000000000000000000d1a2733404d5a66738086868686868686867c6f62574d42362a1d1307000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1825313e4b5864717e8b97a4b0a3978a7d706b707a81898e92999b9ea0a8a1a2a2a8a19e9c9895908a837c736c655c544a40372d21180e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040c12181d2020252525252525252525252525252525252525252525252525313e4a5764717d8a97a4b0a3978a7d7064574a3d3125252423201c1610080000000000000000000000000000000b17222d3841495053504946423b38322d2c28232321201f1b181d1f2022272b313a434d57606d7984919eabaea3998a7e7164574b3e2f23180c000000000000000000000005111d2935414c565e6167676767676767676869676d7073787d838c9298a2a69f9892877e716b60564c4135291e140800000000000000000000000000000814212e3b4754616e7b869293939393938e8175695e52463a2f24180d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1623303d495663707c8996a9b3a5998c7f7266686d757c81868b8e9196949595959496918f8c88837e786f6a605b534a42392e251b0f0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040d161d24292c2d323232323232323232323232323232323232323232323232323e4a5764717d8a97a4b0a3978a7d7064574a3d323232302f2c28211a1108000000000000000000000000000006111b262f383f4446443f3836302c27201f1c18161413120f0c101314171b1f28313b45515c6774808d9aacb4ab9b8e817568554b4034291c100400000000000000000000010d1925303a444c52545a5a5a5a5a5a5a5a5b555d6063656c70787f869298a2aaa29992877d70685e52463b3025190e02000000000000000000000000000714202d3946525e6874818e9aa49f9f9f92867b6e61554b4035291c11060000000000000000000000000000000000000000000000000000000000000000000000000000000000000814212e3b4754616e7a8797a2ada89b8e8175685e616b6f757b7e81848687888988888784827f7b77716d6660585049413930271c130a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010c161f282f35393a3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f4a5764717d8a97a4b0a3978a7d7064574a3f3f3f3f3d3c38332c231a100500000000000000000000000000000a141d262d33373937332d2a251f1b1313100c0707060503000406060b0f161f2834404b5563707c899aa4afaa9d918477675c5145382c1f1306000000000000000000000008131e28323a4146474d4d4d4d4d4d4d4e4e4b5153535b60666c727d869299a3aba39992857a6d61564c41362a1e11050000000000000000000000000005111e2a36414d56626e7b87939facaea3998d8073675d5145382e23170b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000714202d3946525e687885929eabaa9d908477665c596063696e717477797a7b7c7b7b7a7876726e6964605c544e443f382f271e150b010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007121d2831394045474c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c5764717d8a97a4b0a3978a7d7064574c4c4c4c4c4a48443e352c21160b0000000000000000000000000000020b141b22272b2d2b27221b1a140f0a06040000000000000000000000040d18232e3a4754606d7a86939facac9f92867a6d6053473a2d2014070000000000000000000000020c1620283035393a4040404040404041414045474950545b606b707d87929fa8aba1978d8174685e5246392d20140700000000000000000000000000020e1925303b47535f6a75828f9ba6b0ab9f92857a6d60544a3f34281c1003000000000000000000000000000000000000000000000000000000000000000000000000000000000005111e2a36414d566976828f9ca9ac9f9286796d605354575e616568666d6d6e6f6f6e6d676965625f5753504a423d332d261d150c0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010d18242f39434b51535858585858585858585858585858585858585858585858585858585864717d8a97a4b0a3978a7d706458585858585857554f473e33281c10040000000000000000000000000000020a11171b1f201f1b17110e09020000000000000000000000000000000713202c3945515d677884919eabafa399887b6f6255483c2f221509000000000000000000000000040e161e25292d2e34343434343434342f35393a3f444a5059606b73808c96a1ada99f92867a6e6154473b2e23180c000000000000000000000000000008141f2b37424e57626f7c89949fabada2978b7f72665c5044382b1f160a0000000000000000000000000000000000000000000000000000000000000000000000000000000000020e192530404d596673808c99aaafa399887c6f6255494d525458545c606162626261605d555955534d46443f383027221b140b03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004101d2935404b555d606565656565656565656565656565656565656565656565656565656565717d8a97a4b0a3978a7d70656565656565656361594f44382c20140700000000000000000000000000000000060b0f1213120f0b0600000000000000000000000000000000000004111d2935414c556a7784909daab5ab96897c6f6356493c3023160900000000000000000000000000040c13191d2021272727272727272724292c2d33383f444f59606d7984919eabaea3998c7f7266554b4034281c100400000000000000000000000000020e1a26313c4854606a7683909ca7b1a99e9184786d6053463d32271b0f030000000000000000000000000000000000000000000000000000000000000000000000000000000000081723303d4a5663707d8998a2aeab988c7f7265564c4246474b4a5153545556555554514c4c4847423c38342e261e17110a020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000613202c3945515d676d7272727272727272727272727272727272727272727272727272727272727d8a97a4b0a3978a7d7272727272727272706b6155483c2f23160900000000000000000000000000000000000003050605030000000000000000000000000000000000000000010d19242f43505d697683909ca9b0a3968a7d7063574a3d3024170a00000000000000000000010406070f080d1113141a1a1a1a1a1a1a1b181d2022272d333d45515d6773808c99a9b3ab9c908376675c5145382c1f130600000000000000000000000000000915202c38434e5863707d8a95a0acaca1968a7e7164594f43382c1f140900000000000000000000000000000000000000000000000000000000000000000000000000000000000714202d3a4753606d7986929faca99c8f8276685d52463a3b3e40444647484948484745413f3b3a37312b28231c140c0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714202d3a4753606d7a7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f818e9aa7b4a79a8e807f7f7f7f7f7f7f7f7d7063574a3d3024170a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000003101c28343f4a546a7784909daab0a4978a7d7164574a3e3124170b000000000000000001080d1113141c1615130f0a0d0d0d0d0d0d0d070d1013171c222935404b55626e7b8897a2adac9f9286796d6053463a2d2013070000000000000000000000000000030f1b27323d4653606c7884919da8b2a89d9083766b6054483b31261a0e020000000000000000000000000000000000000000000000000000000000000000000000000000000006131f2c3845515c6775828f9caaac9f92867a6d6154473e2f2e34383a3a3b3c3c3b3a39352f2f2e2b261f1c17110a020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000815212e3b4854616e7b878b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8e939da9b5a99d938e8b8b8b8b8b8b8b8b8275685c4f4235291c0f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121f2b3844505c667885919eabb0a396897d7063564a3d3023170a00000000000000040c13191d20212922221f1b150d080100010101000104060b1118242f394653606c7985929fabafa399887b6f6255483c2f2215090000000000000000000000000000000a161f2b3744505b65717e8b96a1adab9f95897c6f63574d42362a1e13080000000000000000000000000000000000000000000000000000000000000000000000000000000004101c2934404b5565717e8b98a3aea3998b7e7265594f42382d282c2d2e2f2f2f2e2d2c292422211e1a15100b0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000815212e3b4854616e7b8794989898989898989898989898989898989898989898989898989898989a9da5afbaafa59d9a989898989898988f8275685c4f4235291c0f00000000000000000000000000000000000000000000030608090d0a0806060300000000000000000000060d15202d3a4653606d7986929facb4aa96897c6f6356493c30231609000000000000040d161e24292c2d352f2e2b272019130c07000000000000000007121f2b3744505b657784909daab5ab968a7d7063574a3d3024170a000000000000000000000000000000030f1b27333f4953606d7984919ea9b1a79b8f8275695f53463a3024190d00000000000000000000000000000000000000000000000000000000000000000000000000000000000c18232f3a4754606d7a86929facab9d9083776b61544a3f33281f20212223222221201d191514120e0903000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000815212e3b4854616e7b8794a1a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a7a9afb7c0b7afa9a7a5a5a5a5a5a59b8f8275685c4f4235291c0f0000000000000000000000000000000000000000040a0f1315161a171513120f0b060b0a0a090a0a090e11171f28333f4a54626f7c8999a3aeaea298887b6e6255483b2f2215080000000000010c161f282f35393a423c3b373229241e18120d08060300000000030f1b27333f4953697683909ca9b0a4978a7d7164574a3e3124170b000000000000000000000000000000000b17222d3844515c66727f8c97a2adac9f93877b6e61564c4135291d1207000000000000000000000000000000000000000000000000000000000000000000000000000000000713202c3945525d6875828e9ba7aca0958a7d70665b50443c31281f17151615151413110d080806030506090807050200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000815212e3b4854616e7b8794a1aeb2b3adaba8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a9abb1b9c2b9b1aba9a8a8a8a8a8a89b8f8275685c4f4235291c0f00000000000000000000000000000000000001070c151b1f2122262422201f1c1719181716161717181a1b2227313944505b6673808c99abb4ac9f9285796d6053463a2d201307000000000008131e28313a4145474f4947433c352f28231d1913120f0b06060b0f131e2a36424d576a7783909daab1a4978a7e7164574b3e3124180b0000000000000000000000000000000006111b2834404a54606d7a85929faaafa4998d8074685d5246392e23180c0000000000000000000000000000000000000000000000000000000000000000000000000000000004111d2935414c5663707c89959faba79d9083786c60574d433a3127221b17120f0b060b0a0b060b0f1213151414110e09020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000815212e3b4854616e7b8794a9b3b3a9a19e9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9d9fa7b1bcb1a79f9d9b9b9b9b9b9b9b8f8275685c4f4235291c0f0000000000000000000000000000000000030b121820262b2e2f33312e2d2b28222624242323232425252a2d333a434c56606c7884919daab6a99d908376665c5044382b1f120600000000060f19242f3a434c51545c55544e45413a342e2a25201f1c171a1a171b1f252d3a46535e697885919eabb6ac978a7d7064574a3d3124170a00000000000000000000000000000000000c18232e3945515d6773808d98a3aeab9f92867a6d61544b4034281c1004000000000000000000000000000000000000000000000000000000000000000000000000000000010d19242f3a4854606b7783909da6aca0958b7f72695f554c433b332d27221f1b171818171818171b1f202221201e1a140d0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000815212e3b4854616e7b8797a1adada197928f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f90959fabb8ab9f95908f8f8f8f8f8f8f8f8275685c4f4235291c0f00000000000000000000000000000000070d151d242932373b3c403d3b3938332d32313130303031323136383f444c555e68717e8b95a0acb1a7998d807366544a3f34281c1003000000030d18222935414c555d6068626058524c45403936302d2b2822272622272b3036404b55616e7b8797a1adafa49a897c6f6256493c2f231609000000000000000000000000000000000007121c2935414b55616e7a86929fabaea2988c7f72665c5145382c1f160b0000000000000000000000000000000000000000000000000000000000000000000000000000000008131e2c38444f5963707d8a949faba79f92867b6e675d554d443f38332d2b2722252424242522272b2d2f2e2d2a251f170e05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714202d3a4753606d7985919ea4ab9e92858282828282828282828282828282828282828282828283909da9b6a99d908382828282828282827f7266594c3f3326190c0000000000000000000000000000000711191f272f353c4347494d4a4846443f413f3e3d3d3c3d3d3f4042464950565d676d7a84919ea7b1aca095887c6f6255493c2e23170b000000010b151f2a343c45515d676d756f6a605d56514b46413b3938332d34332d33373a4146515d67727f8b98a9b2ac9f93867a6d6054473a2d2114070000000000000000000000000000000000000d18242f3a46525e6874818e99a4afaa9e9184796d6053463d33271c100300000000000000000000000000000000000000000000000000000000000000000000000000000001101b27323d4855616b76828f99a3aea2989083796d675f575049443f3937332d32313131322d3337393c3b3a36302920170d020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000613202c3945515d67707d8a929da89f92867c7575757575757575757575757575757575757575757e8a97a4b0a3978a7d7575757575757575726d63574b3e3225180c0000000000000000000000000000040f19232b313940454e535559575553504a4d4c4b4a49494a4a4b4d4d53535b60686d79839096a1adb1a79d9184776a5f54473b2e1c110600000007121d27313c46505a606d79827c746d68605c54524c4846443f414040413f44464c525b606d7984919eabb6ac9d908477685d5245392c20130700000000000000000000000000000000000007131d2a36414c56626e7b87939facada1978b7e7164594f44382c20150a000000000000000000000000000000000000000000000000000000000000000000000000000000000b16212c38444f59626f7c87929fa6aaa0959083796e69605b53504946443f3f3f3e3d3e3e3f3f4446484746423b33291f140900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004101d2935404b55616b74818d96a0a3999184796d686868686868686868686868686868686868717d8a97a4b0a3978a7d706868686868686866635b51463b2f22160a00000000000000000000000000000b16212b353d434b51585f62666461605b545a595757565656575859575e61656c717a828f959fa8b2aa9f958a7e7164584e43372b1f0a000000000c18242f39434e58626c75818e87807a726d66615e565553504a4e4d4d4d495053565e616d73808d96a1acafa49a8d807366564c4135291d1104000000000000000000000000000000000000010e1925303b47535f6975828f9ba6b0a99d9083776b6054483c31261a0f0200000000000000000000000000000000000000000000000000000000000000000000000000000004101c28333e47535f6a737f8c949fa8a79f9590837b716c65605b535350494c4b4b4a4b4b4c4950535554524d453b30251a0e020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010d18242f39434f59606d79849199a3a0968e81746b61565c5c5c5c5c5c5c5c5c5c5c5c5c5c64717d8a97a4b0a3978a7d70645c5c5c5c5c5c595751493f352a1e12060000000000000000000000000004101b27323d474f555d606a6f73706e6c66686765646463636364656668696e72787e848f949fa7b1aea2989083786c6053463c32261b0f00000004101d2935404b555f6a717e8b93938d857f79736d686562605b545b5a595a535b6062686d757f8c929ca8b2aa9f93877b6e6255483b2f24190d010000000000000000000000000000000000000008141e2b37424d57626f7c89949fabaca095897d7063584e43372b1e1408000000000000000000000000000000000000000000000000000000000000000000000000000000000b17212b37434e58606d78829096a1a9a79f9590857e78706c6562605b5359585757575859535b6062615e574d42362a1e110500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007121d28313e45515d676f7c87929fa79d928a7d70685e524f4f4f4f4f4f4f4f4f4f4f4f5764717d8a97a4b0a3978a7d7064574f4f4f4f4f4c4b463f372e23180d02000000000000000000000000000713202c38444f5960676d737c807d7b79777574727170706f7070727375787b7f848a91969fa6b0aea39f92867c6e655b5044372a20150a00000006131f2c3845515d676e7c86929f9f97928b847f7a76726e6c66686767666768656c6f747a818c919ca4aeaea2988e82756a5f53473a2e1e13080000000000000000000000000000000000000000020e1a26313c4754606a7683909ca7b1a79c8f82766a5f53473b3025190e01000000000000000000000000000000000000000000000000000000000000000000000000000000050f1b26313c44505c666d7a849197a1a9a7a098928b837d78726f6c65676665646464656667656c6f6e695e52463a2d201407000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010c161f2935404b55606a73808c959fa59e92857a6d615b51454242424242424242424a5764717d8a97a4b0a3978a7d7064574a424242423f3e3b352e251c120700000000000000000000000000000916222f3b4854606b707980878c8a88858482807f7e7d7c7c7d7d7e808284878c91959ea1a8b0aaa39f918b7e716a5f53493f33271b0f030000000714202d3a4753606d79839098a2a9a19e96918c86827f7b797775747373747476797c81858e939ca3adaea49f92867b6e61574e42372b1e0c0100000000000000000000000000000000000000000009151f2b37434e5863707d8a95a0acaa9e94887c6f62564c41362a1d1207000000000000000000000000000000000000000000000000000000000000000000000000000000000a152028343f4a545e686f7c859297a0a7aaa29f959089847f7c797674727271707171727476797c7b6e6154473b2e21140800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040d18242f39434e58606d78839098a2a1978f82756d62574d42382e35353535353e4a5764717d8a97a4b0a3978a7d7064574a3d35353533322f2a231c130a0000000000000000000000000000000a1623303d495663707d848d9299979892908f8d8c8a8a8989898a8b8c8e9196989da0a7adada8a098928b7f726c61584e41382d22170b000000000b1724313e4a5764717d8a91979fa3aba9a19e99928f8b8886838281808080818385888d92989ea5adaea59d928b7f72695f53453c31261a0e00000000000000000000000000000000000000000000030f1b27323d4653606c7883909da8b0a69a8e8174685e5246392f24180c00000000000000000000000000000000000000000000000000000000000000000000000000000000040c17232e38424c565f6a6f7c8590959fa4aca79f9d96918c888583817f7e7e7d7e7e7f818385887d7063574a3d3024170a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007121d27313d44505c666e7b86929fa69e948b7e72695f544a3f3428292929313e4a5764717d8a97a4b0a3978a7d7064574a3d3129292625221e18120a01000000000000000000000000000003101d2a3643505d69768390969fa3aaa29f9d9b9a9897979696969798999b9ea1a8aaacaca9a29e9691867e726d625a50463c2f261b1106000000000a1723303c4955616c717d858d92999fa4ababa39f9c989892908e8e8d8c8d8e8f92989a9fa2aaafaaa39f928d80746d62574d42332a20150900000000000000000000000000000000000000000000000a161f2b3744505b65717e8b96a1adac9f92867a6e61554b4035291c11060000000000000000000000000000000000000000000000000000000000000000000000000000000006111c26303a444e585f6a6f7b838e939aa0a7aba8a09e9997928f8e8c8b8a8a8a8b8c8d8f928a7d7063574a3d3024170a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010b151f28343f4a545f69727e8b949ea69f92867b6e665c50443d31281d24313e4a5764717d8a97a4b0a3978a7d7064574a3d31241c191816120d0700000000000000000000000000000000020f1c2835424f5b6875828e9ba8afb3adaba6a8a7a5a4a3a3a2a3a3a5a6a8abacaba8a7a09d97928c847c716c625b51483e332a1d140a00000000000814212d3945505a616b707a80878e93999fa2aaaca9aaa39f9d9b9a9a999a9b9c9fa2aaabadaba69e98928b80776c605b51453b3121180e030000000000000000000000000000000000000000000000030f1b27333f4953606d7984919ea9aea3988c8073675d5145382d22170b00000000000000000000000000000000000000000000000000000000000000000000000000000000000a151e29323c464e585f696e79818890959da0a7abaaa9a19e9c9a999897979798999a9c968a7d7063574a3d3024170a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030d17232e38424d57626d75828f97a1a2989083786d60584e433a2f2424313e4a5764717d8a97a4b0a3978a7d7064574a3d3124170c0c0a06020000000000000000000000000000000000010e1b2734414e5a6774818d9aa7b3a9a29e9a9c9d9fa3aba3a4a4a5a4a4a3a9a19e9c9895908b857f796f6a625a51493f362d21180b02000000000005111c28333e48505961686d747b81878d92989c9fa3aaa8aaaaa8a7a6a6a7a7a9abaaa8a9a19e9a948f867f746c655b50493f33291f0f06000000000000000000000000000000000000000000000000000b17222d3844515c66727f8c97a2adaa9e9285796d60544a3f33281c0f0300000000000000000000000000000000000000000000000000000000000000000000000000000000030c17202a343c464e575f676d747c838a90959a9ea1a9a7a9a9a7a5a5a4a3a4a4a5a7a3968a7d7063574a3d3024170a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111c26303c45515b616e7a85929ea59f958c80736a60554b40352924313e4a5764717d8a97a4b0a3978a7d7064574a3d3124170a000000000000000000000000000000000000000000000d1a2633404d596673808c99a6ada297928d8f91929995979798989897969597928f8c88837f7a726d675f5850483f372d241b0f06000000000000000c17222c363e474f565d606a6e757b80858b8f9298999b9d9ea2a9a1a1a1a9a29f9d9b9997928d88827b726d605b53493f372d21180d000000000000000000000000000000000000000000000000000006111b2834404a54606d7a85929faaada1978b7e72665b5044382b1f150a0000000000000000000000000000000000000000000000000000000000000000000000000000000000050e18222a343c454d555d606b6f787d83898d9196979a9c9e9fa3aaa1a1a1aaa39f9e968a7d7063574a3d3024170a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a151e2a333f46525e68707d8a939da79f92877c6f675d51453e3229313e4a5764717d8a97a4b0a3978a7d7064574a3d3124170a000000000000000000000000000000000000000000000c1925323f4c5865727f8b98a5ab9e92858082848687898a8a8b8b8b8a8a888785827f7c77726d68605c554e463f362d251b1209000000000000000005101a242c353e434c52575f62696e747a7e8286898c8e90929794949494949792908e8c8985817c756e69625b504941382d241b0f060000000000000000000000000000000000000000000000000000000c18232e3945515d6773808d98a3aea99e9184786c6053463d32271b0f030000000000000000000000000000000000000000000000000000000000000000000000000000000000061018222a333b434b515960666c71777c8084888b8d8f91929894949594949892918f8a7d7063574a3d3024170a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030c18212a36414c56616c74818e96a0a3999184796d605a50443b30313e4a5764717d8a97a4b0a3978a7d7064574a3d3124170a000000000000000000000000000000000000000000000b1824313e4b5764717e8a97a4ab9e9285787577797b7c7d7e7e7e7e7d7d7c7a7875726f6a65605d56514b433c342d241b13090000000000000000000008121a232c313a41454e53575f62676d71757a7c7f828385868787888787868584827f7c79746f6a625f5751443f382f261b12090000000000000000000000000000000000000000000000000000000007121c2935404b55616d7a86929fabaca0968a7d7064584e43372b1f14090000000000000000000000000000000000000000000000000000000000000000000000000000000000000610182129313940454f545b60646a6f74787b7e8182848686878788888786858482807b6e6154483b2e211508000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060f1925303b44505a606d79849199a3a0968e81746c61564c4136313e4a5764717d8a97a4b0a3978a7d7064574a3d3124170a000000000000000000000000000000000000000000000a1723303d4a5663707d8996a3ac9f9386796d666d6e6f707171727171706f6d676965625f5854524c454039302a221b120901000000000000000000000008111a1f282f353c42474d53555d6064676d70727577787a7a7b7b7b7a7a787775726f6d66625f58534d453f332d261d140a0000000000000000000000000000000000000000000000000000000000000d18242f3a46525e6874818d99a4afa89c9083766a6054473b31251a0e01000000000000000000000000000000000000000000000000000000000000000000000000000000000000060f171f272f353d424a505358606267696e71747677797a7a7b7b7b7a7a797776736e695e52463a2d2014070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008141e29323e45515d676f7c87929fa79d938a7e70685e52463f333e4a5764717d8a97a4b0a3978a7d7064574a3d3124170a000000000000000000000000000000000000000000000916222f3c4955626f7c8895a2afa49a877a6e616061626464656565646362605d555955534e4745413a342e271e1810090000000000000000000000000000080d161e242931373c42474b5154555d606366686a676d6d6e6e6e6e6d676a686662605c54534e47423c3327221b140b0200000000000000000000000000000000000000000000000000000000000007131d2a36414c56616e7b87939facab9f94897c6f62574d42362a1e130800000000000000000000000000000000000000000000000000000000000000000000000000000000000000060d151d24292f383f44464e5456575f62646769656c6d6d6e6e6e6e6d676b6966615e574d42362a1e120500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020d17202935404b55606a73808c959fa59e92857a6e615b51463c3e4a5764717d8a97a4b0a3978a7d7064574a3d3124170a000000000000000000000000000000000000000000000815212e3b4854616e7b8794aab4ac95887b6f62555456575758585857575554514c4c4847433c39352f28231d150c0700000000000000000000000000000000040c131920262b31373a4145474b515356595b555c606161616161605c555b595653504a47433c37312a2117110a0200000000000000000000000000000000000000000000000000000000000000010d1925303a46535f6975828e9ba6b0a69b8e8175695e53463a2f24190d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030b12181d262d33383d4347494d5355585a535b60606161626161605d555c5a54524d453b30251a0e020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050e18242f3a434e58606d78839098a2a1978f82766d62584e423e4a5764717d8a97a4b0a3978a7d7064574a3d3124170a000000000000000000000000000000000000000000000714202d3a4753606d7a8698a2aea396897c70635649494a4b4b4b4b4a4a494745413f3c3a37312c29241e18120b0300000000000000000000000000000000000001080d151a20262b2f35393a404547494c4f4b5153545455545453514b4f4c4946443f3837322b261f180f060000000000000000000000000000000000000000000000000000000000000000000008131e2b37424d57626f7c88949fabac9f92867b6e61554c4135291c1106000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001070b141c22282b32373b3c4247484b4e49505353545455555453514b504d4846423b33291f14090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007131d28313d44515c666e7c86929fa69e948b7f726a5f544a404a5764717d8a97a4b0a3978a7d7064574a3d3124170a0000000000000000000000000000000000000000000006131f2c3845515c677985929faca4978a7d7164574a3e3d3e3e3f3e3e3d3c3a39352f2f2e2b26201d19130c070000000000000000000000000000000000000000000003090e151a1d24292c2f35393a3d3f424045474748484847474540423f3c3a38342e2b26201a150e060000000000000000000000000000000000000000000000000000000000000000000000020e1a26313c4754606a76828f9ca7afa3998d8073675d5145382e23170c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020a11171c1f272b2e31373a3b3e413f444647474848484747454043403b3a36302921170d0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010c161f2834404a545f6a727f8b949ea69f92867c6e665c51444a5764717d8a97a4b0a3978a7d7064574a3d3124170a0000000000000000000000000000000000000000000004101c2934404b556b7884919eaba5988b7f7265584c3f323132323231302f2d2c292422211f1b15110d08010000000000000000000000000000000000000000000000000003090e13181d2024292c2d30332f34383a3a3b3b3b3b3a38342f332f2d2c28231c1b150e09030000000000000000000000000000000000000000000000000000000000000000000000000009141f2b37434e5863707d8995a0acab9f92857a6d60544a3f34281c10030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060b0f161b1f22262b2e2f312d3337393a3a3b3b3b3b3a38352f332e2d2a251f170f05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040d18232e39424e57626d76828f97a1a2989083786d60594f4a5764717d8a97a4b0a3978a7d7064574a3d3124170a00000000000000000000000000000000000000000000000c18232f44505d6a7783909daaa6998c807366594d40332625252524242221201d191515120f0a0401000000000000000000000000000000000000000000000000000000000001070d1113181d2020232623292c2d2e2e2e2e2e2d2c29232623201f1c17110f0a04000000000000000000000000000000000000000000000000000000000000000000000000000000030f1b27323c4855616b7783909da8aea2988c7f72665c5044382c1f160b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030a0f13151a1e21222522272b2d2d2e2e2f2e2e2d2c29242721201e1a140d05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007121c27303c45515b616e7a85929ea5a0958d80736b60554c5764717d8a97a4b0a3978a7d7064574a3d3124170a0000000000000000000000000000000000000000000000071c2936434f5c6976828f9ca9a79a8d8174675a4e4134271b18181717161413110d08080603000606060403010000000000000000000000000000000000000000000000000000000104070d1013141619181c1f202121222121201f1c1819161312100c06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a15202c38444f5964717e8a96a1acaa9e9184796d6053463d32271b0f0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000306090e12141518171b1f20202121222221201f1d181a1514120e0902000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b151e2a333f46525e68717e8a939ea79f93877d6f675d515764717d8a97a4b0a3978a7d7064574a3d3124170a00000000000000000000000000000000000000000000020f1b2835424e5b6875818e9ba8a89b8e8275685b4f4235281c121212121212121212121212121212121210100e0a0500000000000000000000000000000000000000000000000000000000010406070a070c10131414151515141413100c070907060300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004101c27333d4653606d7984919ea9ada1968a7e7164594f44382c1f1509000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002060808060b0f12131414151515141413100c0708070502000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030c18212a36414d56616c74818e96a1a49991847a6d605a5764707d8a97a3b0a3978a7d7064574a3d3124170a00000000000000000000000000000000000000000000010d1a2734404d5a6773808d9aa6a99c8f8376695c50432d22171f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1d1c1a16110a030000000000000000000000000000000000000000000000000000000000000000000406070708080808070604000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b161f2c3844505c66727f8b97a2ada89d9083776b6054483c31261a0e020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003050607070808080807060400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060f1925303b44505a606d7a849199a4a1968e81746c615764707d8a97a3b0a3978a7d7064574a3d3124170a00000000000000000000000000000000000000000000000c1926333f4c5966727f8c99a5aa9d9184776a544a3f33282c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2a2926221c150d04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003101c28343f4a54606d7985929eaaab9f95897c6f63574d42372b1e130800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008141f29323e45515d676f7d87939fa79e938a7e71695e63707d8a96a3b0a3978a7d7064574a3d3124170a00000000000000000000000000000000000000000000000b1825323e4b5865717e8b98a4ab9e928578665b504438393939393939393939393939393939393939393736322d271f170d0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c17232e3845515d6773808c98a2aea79b8f8275695f53473a3025190d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020d17202935414c55606b73808d95a0a59e92857b6e6563707d8996a3b0a3978a7d7064574a3d3124170a00000000000000000000000000000000000000000000000a1724313d4a5764707d8a97a3ac9f9386796c605346454545454545454545454545454545454545454543423e3831291f150a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111c2935404b55616d7a86929fabac9f93877b6e62564c41362a1d1207000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050e19242f3a434f59606d79839098a3a2978f82776c636f7c8996a2afa3978a7d7064574a3d3124170a0000000000000000000000000000000000000000000000091623303c4956636f7c8996a2afa499877a6d6154525252525252525252525252525252525252525252504f4a433b31271c110500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d18242f3946525e6874818d99a3afa49a8d8174685e5246392e23180c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008131e28313d45515c666e7c86929fa69f948b7f726a6f7c8895a2afa3978a7d7064574a3d3124170a00000000000000000000000000000000000000000000000815222f3b4855626e7b8895abb5ab95887b6e625f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5d5b554d43382d22160a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007121d2a36414c56616e7b87929facac9f92867a6d61554b4034281b1106000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010c161f2834404b545f6a727f8b949fa69f92867c6e6f7b8895a2aea3978a7d7064574a3d3124170a00000000000000000000000000000000000000000000000714212e3a4754616d7a8799a3afa296897c6f6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6a665f554a3e32261a0e0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010d1925303a46535f6975818e9ba6aea2988c7f73675c5145382d22170b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040d18232e39424e58606c77828f97a2a3989083786e7b8894a1aea3978a7d7064574a3d3124170a00000000000000000000000000000000000000000000000613202d394653606c7986929faca4978a7e7878787878787878787878787878787878787878787878787671665b4f4236291c1003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008131e2a36424d57626f7c88949fabaa9e9285796d6053493f33271b0f030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007121d27303c44505b656e7b85929fa59f958b7e717a8794a0b6a3978a7d7064574a3d3124170a000000000000000000000000000000000000000000000005121f2b3744505b657885929eabac9f928685858585858585858585858585858585858585858585858583766a5d5043372a1d10040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020e1a26313b47545f6a76828f9ca7ada1978b7e71655b5044372b1f150a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b151e27333f49535e69717e8a939ea79e92857a7a869aa4afa3978a7d7064574a3d3124170a0000000000000000000000000000000000000000000000030f1b27333f49536a7784919daaaea2989292929292929292929292929292929292929292929292929184776a5e5144372b1e110400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009141f2b37434e5863707d8995a0aca99d9184786c6053463c32261b0f0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030c17222d38414d57616c75818e96a1a1978c7f7886939faca3978a7d7064574a3d3124170a0000000000000000000000000000000000000000000000000b17222d43505d697683909ca9b4aaa29f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9d9184776a5e5144372b1e1104000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006060606060606060606060606060606060606030f1b26323c4854606b7783909da8aca0958a7d7063584e43372b1f1409000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111b262f3b45505a606d7a84919aa49f92857a85929faca3978a7d7064574a3d3124170a000000000000000000000000000000000000000000000000061c2935424f5c6875828f9ba8b0b4aeacabababababababababababababababababababababaa9d9184776a5e5144372b1e1104000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000104060712121212121212121212121212121212121212120a15202c38444f5964717e8a96a1aca79c8f82766a5f53473b3025190e0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a141d29333e45525d68707d88939fa2978c7f85919eaba3978a7d7064574a3d3124170a0000000000000000000000000000000000000000000000010e1b2834414e5b6774818e9aa3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a39d9184776a5e5144372b1e1104000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001070d1013141f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1c27333d4653606d7884919ea9ab9f94887c6f62564d42362a1d12070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020b17202935414c56606b73808d95a09f928587929faca3978a7d7064574a3d3124170a0000000000000000000000000000000000000000000000000d1a2633404d596673808c96969696969696969696969696969696969696969696969696969696969184776a5e5144372b1e110400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040c12181d20202c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2b3844505c66727f8b97a1ada69b8e8174695e5246392f24180d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050e19242f3a434f59606d79839098a298929299a3afa3978a7d7064574a3d3124170a0000000000000000000000000000000000000000000000000c1925323f4c5865727f8989898989898989898989898989898989898989898989898989898989898984776a5e5144372b1e1104000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040d161d24292c2d39393939393939393939393939393939393939393939393939343f4a54606d7985929eaaac9f92867b6e61554b4035291c110600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008131e28313d45515c676f7c86929fa29f9fa3abb5a3978a7d7064574a3d3124170a0000000000000000000000000000000000000000000000000814212e3b4754616e7b7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7c6f6256493c2f231609000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010c161f282f35393a45454545454545454545454545454545454545454545454545454545515d6773808c98a2aea3998d8073675d5145382d22170b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010c161f2834404b555f6a727f8c949fa9acafb5b0a3978a7d7064574a3d3124170a0000000000000000000000000000000000000000000000000714202d3a46525e696e707070707070707070707070707070707070707070707070707070707070706f6a6054483b2e22150900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007121d283139404547525252525252525252525252525252525252525252525252525252524b55616d7a86929fabab9f9285796d60544a3f33281c0f03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040d18232e39434e58606c78828f97a2adb4b4b0a3978a7d7064574a3d3124170a00000000000000000000000000000000000000000000000005111e2a36424d565e61636363636363636363636363636363636363636363636363636363636363636260584e43382c1f13070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010d18242f39434b51535f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5e6874808d99a3ada2978b7f72665b5044382b1f13080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007121d27303c44505b666e7b85929fa5a7a7a7a3978a7d7064574a3d3124170a000000000000000000000000000000000000000000000000020e1925303b444d52545656565656565656565656565656565656565656565656565656565656565656544e463d32271b0f03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004101d2935404b555d606c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6e7b87929faca99e9184786c6053463a2f24190d01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b151e28333f4a545e69717e8a939b9b9b9b9b978a7d7064574a3d3124170a0000000000000000000000000000000000000000000000000009141f29323b4246474a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4948433d342b21160a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000613202c3945515d676d78787878787878787878787878787878787878787878787878787878787878787878818e9ba8aca0968a7d7164554c4135291d110400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030c17222d38424d57616c75818e8e8e8e8e8e8e8a7d7064574a3d3124170a00000000000000000000000000000000000000000000000000020d17202930363a3b3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3c3b38322b22190f040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714202d3a4753606d798585858585858585858585858585858585858585858585858585858585858585858586929facb2a89c908376675d5145392c201306000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111c262f3b45505a606d7a81818181818181817c6f6255493c2f2216090000000000000000000000000000000000000000000000000000050e171f252a2d2e303030303030303030303030303030303030303030303030303030303030302f2e2c2721191007000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714202d3a4753606d7a869292929292929292929292929292929292929292929292929292929292929292929298a2aeb7ab9f94877a6d6054473a2d2114070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a141d29333e45525d686d74747474747474746f6a5f54473b2e221508000000000000000000000000000000000000000000000000000000050d14191e20212323232323232323232323232323232323232323232323232323232323232323221f1b160f0700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714202d3a4753606d7a86939f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9fa2aab4bcb0a693877a6d6054473a2d211407000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020b17212935414c565d606768686868686868625f584e43372b1f13060000000000000000000000000000000000000000000000000000000002090e111414171717171717171717171717171717171717171717171717171717171717171615130f0a040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714202d3a4753606d7a8693a0abababababababababababababababababababababababababababababababacaeb4b0b0ada093877a6d6054473a2d21140700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050f1924303a444c52545b5b5b5b5b5b5b5b55544e463c32261b0f03000000000000000000000000000000000000000000000000000000000000020507080a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0909070300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714202d3a4753606d7a8693a0a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a093877a6d6054473a2d211407000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008131e28323a4145474e4e4e4e4e4e4e4e4947433c342a20150a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714202d3a4753606d7a869396969696969696969696969696969696969696969696969696969696969696969696969696969693877a6d6054473a2d2114070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020c1620283035393a41414141414141413c3b37322a22190e040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714202d3a4753606d7a868989898989898989898989898989898989898989898989898989898989898989898989898989898989877a6d6054473a2d211407000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040e161e24292c2d34353535353535352f2e2b2620191007000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d787d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d786d6053463a2d20130700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040c13191d2021282828282828282822221f1b150e07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121f2b3844505c666d707070707070707070707070707070707070707070707070707070707070707070707070707070707070706d665c5044382c1f1206000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080d1113141b1b1b1b1b1b1b1b1615130f0a0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003101c28343f4a545c6063636363636363636363636363636363636363636363636363636363636363636363636363636363636363605c544a3f34281c100300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010407070e0e0e0e0e0e0e0e090806030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b17232e38424a50535656565656565656565656565656565656565656565656565656565656565656565656565656565656565653504a42382e23170c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111c2630383f44464a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a46443f3830261c1106000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a141e262e34383a3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3a38342e261e150a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020c141c23282b2d303030303030303030303030303030303030303030303030303030303030303030303030303030303030302d2c28231c150c03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020a11171c1f2023232323232323232323232323232323232323232323232323232323232323232323232323232323232323201f1c17110a03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060b101213171717171717171717171717171717171717171717171717171717171717171717171717171717171717171312100c06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000306070a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a070603000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m_StreamData: + serializedVersion: 2 + offset: 0 + size: 0 + path: diff --git a/Assets/Resources/TextMesh Pro/Fonts/NotoSans-VariableFont_wdth,wght SDF.asset.meta b/Assets/Resources/TextMesh Pro/Fonts/NotoSans-VariableFont_wdth,wght SDF.asset.meta new file mode 100644 index 0000000..3262fb4 --- /dev/null +++ b/Assets/Resources/TextMesh Pro/Fonts/NotoSans-VariableFont_wdth,wght SDF.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2b12354fb2d86744887c3e4bfee63986 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/TextMesh Pro/Fonts/NotoSans-VariableFont_wdth,wght.ttf b/Assets/Resources/TextMesh Pro/Fonts/NotoSans-VariableFont_wdth,wght.ttf new file mode 100644 index 0000000..9530d84 Binary files /dev/null and b/Assets/Resources/TextMesh Pro/Fonts/NotoSans-VariableFont_wdth,wght.ttf differ diff --git a/Assets/Resources/TextMesh Pro/Fonts/NotoSans-VariableFont_wdth,wght.ttf.meta b/Assets/Resources/TextMesh Pro/Fonts/NotoSans-VariableFont_wdth,wght.ttf.meta new file mode 100644 index 0000000..319883f --- /dev/null +++ b/Assets/Resources/TextMesh Pro/Fonts/NotoSans-VariableFont_wdth,wght.ttf.meta @@ -0,0 +1,21 @@ +fileFormatVersion: 2 +guid: 35400ee909f32d94f9901006d051135c +TrueTypeFontImporter: + externalObjects: {} + serializedVersion: 4 + fontSize: 16 + forceTextureCase: -2 + characterSpacing: 0 + characterPadding: 1 + includeFontData: 1 + fontNames: + - Noto Sans + fallbackFontReferences: [] + customCharacters: + fontRenderingMode: 0 + ascentCalculationMode: 1 + useLegacyBoundsCalculation: 0 + shouldRoundAdvanceValue: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/TextMesh Pro/Fonts/OFL.txt b/Assets/Resources/TextMesh Pro/Fonts/OFL.txt new file mode 100644 index 0000000..0373e14 --- /dev/null +++ b/Assets/Resources/TextMesh Pro/Fonts/OFL.txt @@ -0,0 +1,93 @@ +Copyright 2022 The Noto Project Authors (https://github.com/notofonts/latin-greek-cyrillic) + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +https://openfontlicense.org + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/Assets/Resources/TextMesh Pro/Fonts/OFL.txt.meta b/Assets/Resources/TextMesh Pro/Fonts/OFL.txt.meta new file mode 100644 index 0000000..7dea168 --- /dev/null +++ b/Assets/Resources/TextMesh Pro/Fonts/OFL.txt.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 42632c789aa9b7e47b17c77a4663f14d +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/TextMesh Pro/LineBreaking Following Characters.txt b/Assets/Resources/TextMesh Pro/LineBreaking Following Characters.txt new file mode 100644 index 0000000..a52cc38 --- /dev/null +++ b/Assets/Resources/TextMesh Pro/LineBreaking Following Characters.txt @@ -0,0 +1 @@ +)]ï½ã€•〉》ã€ã€ã€‘〙〗〟’â€ï½ Â»ãƒ½ãƒ¾ãƒ¼ã‚¡ã‚£ã‚¥ã‚§ã‚©ãƒƒãƒ£ãƒ¥ãƒ§ãƒ®ãƒµãƒ¶ããƒã…ã‡ã‰ã£ã‚ƒã‚…ょゎゕゖㇰㇱㇲㇳㇴㇵㇶㇷㇸㇹㇺㇻㇼㇽㇾㇿ々〻â€ã‚ â€“〜?!‼â‡âˆâ‰ãƒ»ã€%,.:;。ï¼ï¼Ÿï¼½ï¼‰ï¼šï¼›ï¼}¢°"†‡℃〆%,. \ No newline at end of file diff --git a/Assets/Resources/TextMesh Pro/LineBreaking Following Characters.txt.meta b/Assets/Resources/TextMesh Pro/LineBreaking Following Characters.txt.meta new file mode 100644 index 0000000..73ed660 --- /dev/null +++ b/Assets/Resources/TextMesh Pro/LineBreaking Following Characters.txt.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: fade42e8bc714b018fac513c043d323b +timeCreated: 1425440388 +licenseType: Store +TextScriptImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/TextMesh Pro/LineBreaking Leading Characters.txt b/Assets/Resources/TextMesh Pro/LineBreaking Leading Characters.txt new file mode 100644 index 0000000..ccbb4ae --- /dev/null +++ b/Assets/Resources/TextMesh Pro/LineBreaking Leading Characters.txt @@ -0,0 +1 @@ +([{〔〈《「『ã€ã€˜ã€–ã€â€˜â€œï½ŸÂ«$—…‥〳〴〵\[({£¥"々〇$¥₩ # \ No newline at end of file diff --git a/Assets/Resources/TextMesh Pro/LineBreaking Leading Characters.txt.meta b/Assets/Resources/TextMesh Pro/LineBreaking Leading Characters.txt.meta new file mode 100644 index 0000000..cc684b3 --- /dev/null +++ b/Assets/Resources/TextMesh Pro/LineBreaking Leading Characters.txt.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d82c1b31c7e74239bff1220585707d2b +timeCreated: 1425440388 +licenseType: Store +TextScriptImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/TextMesh Pro/Shaders.meta b/Assets/Resources/TextMesh Pro/Shaders.meta new file mode 100644 index 0000000..29a90a6 --- /dev/null +++ b/Assets/Resources/TextMesh Pro/Shaders.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e9f693669af91aa45ad615fc681ed29f +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/TextMesh Pro/Shaders/SDFFunctions.hlsl b/Assets/Resources/TextMesh Pro/Shaders/SDFFunctions.hlsl new file mode 100644 index 0000000..b611994 --- /dev/null +++ b/Assets/Resources/TextMesh Pro/Shaders/SDFFunctions.hlsl @@ -0,0 +1,178 @@ +float2 UnpackUV(float uv) +{ + float2 output; + output.x = floor(uv / 4096.0); + output.y = uv - 4096.0 * output.x; + + return output * 0.001953125; +} + +float4 BlendARGB(float4 overlying, float4 underlying) +{ + overlying.rgb *= overlying.a; + underlying.rgb *= underlying.a; + float3 blended = overlying.rgb + ((1 - overlying.a) * underlying.rgb); + float alpha = underlying.a + (1 - underlying.a) * overlying.a; + return float4(blended / alpha, alpha); +} + +float3 GetSpecular(float3 n, float3 l) +{ + float spec = pow(max(0.0, dot(n, l)), _Reflectivity); + return _SpecularColor.rgb * spec * _SpecularPower; +} + +void GetSurfaceNormal_float(texture2D atlas, float textureWidth, float textureHeight, float2 uv, bool isFront, out float3 nornmal) +{ + float3 delta = float3(1.0 / textureWidth, 1.0 / textureHeight, 0.0); + + // Read "height field" + float4 h = float4( + SAMPLE_TEXTURE2D(atlas, SamplerState_Linear_Clamp, uv - delta.xz).a, + SAMPLE_TEXTURE2D(atlas, SamplerState_Linear_Clamp, uv + delta.xz).a, + SAMPLE_TEXTURE2D(atlas, SamplerState_Linear_Clamp, uv - delta.zy).a, + SAMPLE_TEXTURE2D(atlas, SamplerState_Linear_Clamp, uv + delta.zy).a); + + bool raisedBevel = _BevelType; + + h += _BevelOffset; + + float bevelWidth = max(.01, _BevelWidth); + + // Track outline + h -= .5; + h /= bevelWidth; + h = saturate(h + .5); + + if (raisedBevel) h = 1 - abs(h * 2.0 - 1.0); + h = lerp(h, sin(h * 3.141592 / 2.0), float4(_BevelRoundness, _BevelRoundness, _BevelRoundness, _BevelRoundness)); + h = min(h, 1.0 - float4(_BevelClamp, _BevelClamp, _BevelClamp, _BevelClamp)); + h *= _BevelAmount * bevelWidth * _GradientScale * -2.0; + + float3 va = normalize(float3(-1.0, 0.0, h.y - h.x)); + float3 vb = normalize(float3(0.0, 1.0, h.w - h.z)); + + float3 f = float3(1, 1, 1); + if (isFront) f = float3(1, 1, -1); + nornmal = cross(va, vb) * f; +} + +void EvaluateLight_float(float4 faceColor, float3 n, out float4 color) +{ + n.z = abs(n.z); + float3 light = normalize(float3(sin(_LightAngle), cos(_LightAngle), 1.0)); + + float3 col = max(faceColor.rgb, 0) + GetSpecular(n, light)* faceColor.a; + //faceColor.rgb += col * faceColor.a; + col *= 1 - (dot(n, light) * _Diffuse); + col *= lerp(_Ambient, 1, n.z * n.z); + + //fixed4 reflcol = texCUBE(_Cube, reflect(input.viewDir, -n)); + //faceColor.rgb += reflcol.rgb * lerp(_ReflectFaceColor.rgb, _ReflectOutlineColor.rgb, saturate(sd + outline * 0.5)) * faceColor.a; + + color = float4(col, faceColor.a); +} + +// Add custom function to handle time in HDRP + + +// +void GenerateUV_float(float2 inUV, float4 transform, float2 animSpeed, out float2 outUV) +{ + outUV = inUV * transform.xy + transform.zw + (animSpeed * _Time.y); +} + +void ComputeUVOffset_float(float texWidth, float texHeight, float2 offset, float SDR, out float2 uvOffset) +{ + uvOffset = float2(-offset.x * SDR / texWidth, -offset.y * SDR / texHeight); +} + +void ScreenSpaceRatio2_float(float4x4 projection, float4 position, float2 objectScale, float screenWidth, float screenHeight, float fontScale, out float SSR) +{ + float2 pixelSize = position.w; + pixelSize /= (objectScale * mul((float2x2)projection, float2(screenWidth, screenHeight))); + SSR = rsqrt(dot(pixelSize, pixelSize)*2) * fontScale; +} + +// UV : Texture coordinate of the source distance field texture +// TextureSize : Size of the source distance field texture +// Filter : Enable perspective filter (soften) +void ScreenSpaceRatio_float(float2 UV, float TextureSize, bool Filter, out float SSR) +{ + if(Filter) + { + float2 a = float2(ddx(UV.x), ddy(UV.x)); + float2 b = float2(ddx(UV.y), ddy(UV.y)); + float s = lerp(dot(a,a), dot(b,b), 0.5); + SSR = rsqrt(s) / TextureSize; + } + else + { + float s = rsqrt(abs(ddx(UV.x) * ddy(UV.y) - ddy(UV.x) * ddx(UV.y))); + SSR = s / TextureSize; + } +} + +// SSR : Screen Space Ratio +// SD : Signed Distance (encoded : Distance / SDR + .5) +// SDR : Signed Distance Ratio +// +// IsoPerimeter : Dilate / Contract the shape +void ComputeSDF_float(float SSR, float SD, float SDR, float isoPerimeter, float softness, out float outAlpha) +{ + softness *= SSR * SDR; + float d = (SD - 0.5) * SDR; // Signed distance to edge, in Texture space + outAlpha = saturate((d * 2.0 * SSR + 0.5 + isoPerimeter * SDR * SSR + softness * 0.5) / (1.0 + softness)); // Screen pixel coverage (alpha) +} + +void ComputeSDF2_float(float SSR, float SD, float SDR, float2 isoPerimeter, float2 softness, out float2 outAlpha) +{ + softness *= SSR * SDR; + float d = (SD - 0.5f) * SDR; + outAlpha = saturate((d * 2.0f * SSR + 0.5f + isoPerimeter * SDR * SSR + softness * 0.5) / (1.0 + softness)); +} + +void ComputeSDF4_float(float SSR, float SD, float SDR, float4 isoPerimeter, float4 softness, out float4 outAlpha) +{ + softness *= SSR * SDR; + float d = (SD - 0.5f) * SDR; + outAlpha = saturate((d * 2.0f * SSR + 0.5f + isoPerimeter * SDR * SSR + softness * 0.5) / (1.0 + softness)); +} + +void ComputeSDF44_float(float SSR, float4 SD, float SDR, float4 isoPerimeter, float4 softness, bool outline, out float4 outAlpha) +{ + softness *= SSR * SDR; + float4 d = (SD - 0.5f) * SDR; + if(outline) d.w = max(max(d.x, d.y), d.z); + outAlpha = saturate((d * 2.0f * SSR + 0.5f + isoPerimeter * SDR * SSR + softness * 0.5) / (1.0 + softness)); +} + +void Composite_float(float4 overlying, float4 underlying, out float4 outColor) +{ + outColor = BlendARGB(overlying, underlying); +} + +// Face only +void Layer1_float(float alpha, float4 color0, out float4 outColor) +{ + color0.a *= alpha; + outColor = color0; +} + +// Face + 1 Outline +void Layer2_float(float2 alpha, float4 color0, float4 color1, out float4 outColor) +{ + color1.a *= alpha.y; + color0.rgb *= color0.a; color1.rgb *= color1.a; + outColor = lerp(color1, color0, alpha.x); + outColor.rgb /= outColor.a; +} + +// Face + 3 Outline +void Layer4_float(float4 alpha, float4 color0, float4 color1, float4 color2, float4 color3, out float4 outColor) +{ + color3.a *= alpha.w; + color0.rgb *= color0.a; color1.rgb *= color1.a; color2.rgb *= color2.a; color3.rgb *= color3.a; + outColor = lerp(lerp(lerp(color3, color2, alpha.z), color1, alpha.y), color0, alpha.x); + outColor.rgb /= outColor.a; +} diff --git a/Assets/Resources/TextMesh Pro/Shaders/SDFFunctions.hlsl.meta b/Assets/Resources/TextMesh Pro/Shaders/SDFFunctions.hlsl.meta new file mode 100644 index 0000000..001b14e --- /dev/null +++ b/Assets/Resources/TextMesh Pro/Shaders/SDFFunctions.hlsl.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 96de908384869cd409c75efa351d5edf +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + preprocessorOverride: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/TextMesh Pro/Shaders/TMP_Bitmap-Custom-Atlas.shader b/Assets/Resources/TextMesh Pro/Shaders/TMP_Bitmap-Custom-Atlas.shader new file mode 100644 index 0000000..908e063 --- /dev/null +++ b/Assets/Resources/TextMesh Pro/Shaders/TMP_Bitmap-Custom-Atlas.shader @@ -0,0 +1,139 @@ +Shader "TextMeshPro/Bitmap Custom Atlas" { + +Properties { + _MainTex ("Font Atlas", 2D) = "white" {} + _FaceTex ("Font Texture", 2D) = "white" {} + _FaceColor ("Text Color", Color) = (1,1,1,1) + + _VertexOffsetX ("Vertex OffsetX", float) = 0 + _VertexOffsetY ("Vertex OffsetY", float) = 0 + _MaskSoftnessX ("Mask SoftnessX", float) = 0 + _MaskSoftnessY ("Mask SoftnessY", float) = 0 + + _ClipRect ("Clip Rect", vector) = (-32767, -32767, 32767, 32767) + _Padding ("Padding", float) = 0 + + _StencilComp ("Stencil Comparison", Float) = 8 + _Stencil ("Stencil ID", Float) = 0 + _StencilOp ("Stencil Operation", Float) = 0 + _StencilWriteMask ("Stencil Write Mask", Float) = 255 + _StencilReadMask ("Stencil Read Mask", Float) = 255 + + _CullMode ("Cull Mode", Float) = 0 + _ColorMask ("Color Mask", Float) = 15 +} + +SubShader{ + + Tags { "Queue" = "Transparent" "IgnoreProjector" = "True" "RenderType" = "Transparent" } + + Stencil + { + Ref[_Stencil] + Comp[_StencilComp] + Pass[_StencilOp] + ReadMask[_StencilReadMask] + WriteMask[_StencilWriteMask] + } + + + Lighting Off + Cull [_CullMode] + ZTest [unity_GUIZTestMode] + ZWrite Off + Fog { Mode Off } + Blend SrcAlpha OneMinusSrcAlpha + ColorMask[_ColorMask] + + Pass { + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + + #pragma multi_compile __ UNITY_UI_CLIP_RECT + #pragma multi_compile __ UNITY_UI_ALPHACLIP + + + #include "UnityCG.cginc" + + struct appdata_t + { + float4 vertex : POSITION; + fixed4 color : COLOR; + float4 texcoord0 : TEXCOORD0; + float2 texcoord1 : TEXCOORD1; + }; + + struct v2f + { + float4 vertex : SV_POSITION; + fixed4 color : COLOR; + float2 texcoord0 : TEXCOORD0; + float2 texcoord1 : TEXCOORD1; + float4 mask : TEXCOORD2; + }; + + uniform sampler2D _MainTex; + uniform sampler2D _FaceTex; + uniform float4 _FaceTex_ST; + uniform fixed4 _FaceColor; + + uniform float _VertexOffsetX; + uniform float _VertexOffsetY; + uniform float4 _ClipRect; + uniform float _MaskSoftnessX; + uniform float _MaskSoftnessY; + uniform float _UIMaskSoftnessX; + uniform float _UIMaskSoftnessY; + + v2f vert (appdata_t v) + { + float4 vert = v.vertex; + vert.x += _VertexOffsetX; + vert.y += _VertexOffsetY; + + vert.xy += (vert.w * 0.5) / _ScreenParams.xy; + + float4 vPosition = UnityPixelSnap(UnityObjectToClipPos(vert)); + + fixed4 faceColor = v.color; + faceColor *= _FaceColor; + + v2f OUT; + OUT.vertex = vPosition; + OUT.color = faceColor; + OUT.texcoord0 = v.texcoord0; + OUT.texcoord1 = TRANSFORM_TEX(v.texcoord1, _FaceTex); + float2 pixelSize = vPosition.w; + pixelSize /= abs(float2(_ScreenParams.x * UNITY_MATRIX_P[0][0], _ScreenParams.y * UNITY_MATRIX_P[1][1])); + + // Clamp _ClipRect to 16bit. + const float4 clampedRect = clamp(_ClipRect, -2e10, 2e10); + const half2 maskSoftness = half2(max(_UIMaskSoftnessX, _MaskSoftnessX), max(_UIMaskSoftnessY, _MaskSoftnessY)); + OUT.mask = float4(vert.xy * 2 - clampedRect.xy - clampedRect.zw, 0.25 / (0.25 * maskSoftness + pixelSize.xy)); + + return OUT; + } + + fixed4 frag (v2f IN) : SV_Target + { + fixed4 color = tex2D(_MainTex, IN.texcoord0) * tex2D(_FaceTex, IN.texcoord1) * IN.color; + + // Alternative implementation to UnityGet2DClipping with support for softness. + #if UNITY_UI_CLIP_RECT + half2 m = saturate((_ClipRect.zw - _ClipRect.xy - abs(IN.mask.xy)) * IN.mask.zw); + color *= m.x * m.y; + #endif + + #if UNITY_UI_ALPHACLIP + clip(color.a - 0.001); + #endif + + return color; + } + ENDCG + } +} + + CustomEditor "TMPro.EditorUtilities.TMP_BitmapShaderGUI" +} diff --git a/Assets/Resources/TextMesh Pro/Shaders/TMP_Bitmap-Custom-Atlas.shader.meta b/Assets/Resources/TextMesh Pro/Shaders/TMP_Bitmap-Custom-Atlas.shader.meta new file mode 100644 index 0000000..0a416c8 --- /dev/null +++ b/Assets/Resources/TextMesh Pro/Shaders/TMP_Bitmap-Custom-Atlas.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 48bb5f55d8670e349b6e614913f9d910 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/TextMesh Pro/Shaders/TMP_Bitmap-Mobile.shader b/Assets/Resources/TextMesh Pro/Shaders/TMP_Bitmap-Mobile.shader new file mode 100644 index 0000000..c80246b --- /dev/null +++ b/Assets/Resources/TextMesh Pro/Shaders/TMP_Bitmap-Mobile.shader @@ -0,0 +1,150 @@ +Shader "TextMeshPro/Mobile/Bitmap" { + +Properties { + _MainTex ("Font Atlas", 2D) = "white" {} + _Color ("Text Color", Color) = (1,1,1,1) + _DiffusePower ("Diffuse Power", Range(1.0,4.0)) = 1.0 + + _VertexOffsetX ("Vertex OffsetX", float) = 0 + _VertexOffsetY ("Vertex OffsetY", float) = 0 + _MaskSoftnessX ("Mask SoftnessX", float) = 0 + _MaskSoftnessY ("Mask SoftnessY", float) = 0 + + _ClipRect ("Clip Rect", vector) = (-32767, -32767, 32767, 32767) + + _StencilComp ("Stencil Comparison", Float) = 8 + _Stencil ("Stencil ID", Float) = 0 + _StencilOp ("Stencil Operation", Float) = 0 + _StencilWriteMask ("Stencil Write Mask", Float) = 255 + _StencilReadMask ("Stencil Read Mask", Float) = 255 + + _CullMode ("Cull Mode", Float) = 0 + _ColorMask ("Color Mask", Float) = 15 +} + +SubShader { + + Tags { "Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent" } + + Stencil + { + Ref[_Stencil] + Comp[_StencilComp] + Pass[_StencilOp] + ReadMask[_StencilReadMask] + WriteMask[_StencilWriteMask] + } + + + Lighting Off + Cull [_CullMode] + ZTest [unity_GUIZTestMode] + ZWrite Off + Fog { Mode Off } + Blend SrcAlpha OneMinusSrcAlpha + ColorMask[_ColorMask] + + Pass { + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + #pragma fragmentoption ARB_precision_hint_fastest + + #pragma multi_compile __ UNITY_UI_CLIP_RECT + #pragma multi_compile __ UNITY_UI_ALPHACLIP + + + #include "UnityCG.cginc" + + struct appdata_t + { + float4 vertex : POSITION; + fixed4 color : COLOR; + float2 texcoord0 : TEXCOORD0; + float2 texcoord1 : TEXCOORD1; + }; + + struct v2f + { + float4 vertex : POSITION; + fixed4 color : COLOR; + float2 texcoord0 : TEXCOORD0; + float4 mask : TEXCOORD2; + }; + + sampler2D _MainTex; + fixed4 _Color; + float _DiffusePower; + + uniform float _VertexOffsetX; + uniform float _VertexOffsetY; + uniform float4 _ClipRect; + uniform float _MaskSoftnessX; + uniform float _MaskSoftnessY; + uniform float _UIMaskSoftnessX; + uniform float _UIMaskSoftnessY; + + v2f vert (appdata_t v) + { + v2f OUT; + float4 vert = v.vertex; + vert.x += _VertexOffsetX; + vert.y += _VertexOffsetY; + + vert.xy += (vert.w * 0.5) / _ScreenParams.xy; + + OUT.vertex = UnityPixelSnap(UnityObjectToClipPos(vert)); + OUT.color = v.color; + OUT.color *= _Color; + OUT.color.rgb *= _DiffusePower; + OUT.texcoord0 = v.texcoord0; + + float2 pixelSize = OUT.vertex.w; + //pixelSize /= abs(float2(_ScreenParams.x * UNITY_MATRIX_P[0][0], _ScreenParams.y * UNITY_MATRIX_P[1][1])); + + // Clamp _ClipRect to 16bit. + const float4 clampedRect = clamp(_ClipRect, -2e10, 2e10); + const half2 maskSoftness = half2(max(_UIMaskSoftnessX, _MaskSoftnessX), max(_UIMaskSoftnessY, _MaskSoftnessY)); + OUT.mask = float4(vert.xy * 2 - clampedRect.xy - clampedRect.zw, 0.25 / (0.25 * maskSoftness + pixelSize.xy)); + + return OUT; + } + + fixed4 frag (v2f IN) : COLOR + { + fixed4 color = fixed4(IN.color.rgb, IN.color.a * tex2D(_MainTex, IN.texcoord0).a); + + // Alternative implementation to UnityGet2DClipping with support for softness. + #if UNITY_UI_CLIP_RECT + half2 m = saturate((_ClipRect.zw - _ClipRect.xy - abs(IN.mask.xy)) * IN.mask.zw); + color *= m.x * m.y; + #endif + + #if UNITY_UI_ALPHACLIP + clip(color.a - 0.001); + #endif + + return color; + } + ENDCG + } +} + +SubShader { + Tags { "Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent" } + Lighting Off Cull Off ZTest Always ZWrite Off Fog { Mode Off } + Blend SrcAlpha OneMinusSrcAlpha + BindChannels { + Bind "Color", color + Bind "Vertex", vertex + Bind "TexCoord", texcoord0 + } + Pass { + SetTexture [_MainTex] { + constantColor [_Color] combine constant * primary, constant * texture + } + } +} + +CustomEditor "TMPro.EditorUtilities.TMP_BitmapShaderGUI" +} diff --git a/Assets/Resources/TextMesh Pro/Shaders/TMP_Bitmap-Mobile.shader.meta b/Assets/Resources/TextMesh Pro/Shaders/TMP_Bitmap-Mobile.shader.meta new file mode 100644 index 0000000..d5fb125 --- /dev/null +++ b/Assets/Resources/TextMesh Pro/Shaders/TMP_Bitmap-Mobile.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 1e3b057af24249748ff873be7fafee47 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/TextMesh Pro/Shaders/TMP_Bitmap.shader b/Assets/Resources/TextMesh Pro/Shaders/TMP_Bitmap.shader new file mode 100644 index 0000000..7142a56 --- /dev/null +++ b/Assets/Resources/TextMesh Pro/Shaders/TMP_Bitmap.shader @@ -0,0 +1,139 @@ +Shader "TextMeshPro/Bitmap" { + +Properties { + _MainTex ("Font Atlas", 2D) = "white" {} + _FaceTex ("Font Texture", 2D) = "white" {} + _FaceColor ("Text Color", Color) = (1,1,1,1) + + _VertexOffsetX ("Vertex OffsetX", float) = 0 + _VertexOffsetY ("Vertex OffsetY", float) = 0 + _MaskSoftnessX ("Mask SoftnessX", float) = 0 + _MaskSoftnessY ("Mask SoftnessY", float) = 0 + + _ClipRect ("Clip Rect", vector) = (-32767, -32767, 32767, 32767) + + _StencilComp ("Stencil Comparison", Float) = 8 + _Stencil ("Stencil ID", Float) = 0 + _StencilOp ("Stencil Operation", Float) = 0 + _StencilWriteMask ("Stencil Write Mask", Float) = 255 + _StencilReadMask ("Stencil Read Mask", Float) = 255 + + _CullMode ("Cull Mode", Float) = 0 + _ColorMask ("Color Mask", Float) = 15 +} + +SubShader{ + + Tags { "Queue" = "Transparent" "IgnoreProjector" = "True" "RenderType" = "Transparent" } + + Stencil + { + Ref[_Stencil] + Comp[_StencilComp] + Pass[_StencilOp] + ReadMask[_StencilReadMask] + WriteMask[_StencilWriteMask] + } + + + Lighting Off + Cull [_CullMode] + ZTest [unity_GUIZTestMode] + ZWrite Off + Fog { Mode Off } + Blend SrcAlpha OneMinusSrcAlpha + ColorMask[_ColorMask] + + Pass { + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + + #pragma multi_compile __ UNITY_UI_CLIP_RECT + #pragma multi_compile __ UNITY_UI_ALPHACLIP + + + #include "UnityCG.cginc" + + struct appdata_t + { + float4 vertex : POSITION; + fixed4 color : COLOR; + float4 texcoord0 : TEXCOORD0; + float2 texcoord1 : TEXCOORD1; + }; + + struct v2f + { + float4 vertex : SV_POSITION; + fixed4 color : COLOR; + float2 texcoord0 : TEXCOORD0; + float2 texcoord1 : TEXCOORD1; + float4 mask : TEXCOORD2; + }; + + uniform sampler2D _MainTex; + uniform sampler2D _FaceTex; + uniform float4 _FaceTex_ST; + uniform fixed4 _FaceColor; + + uniform float _VertexOffsetX; + uniform float _VertexOffsetY; + uniform float4 _ClipRect; + uniform float _MaskSoftnessX; + uniform float _MaskSoftnessY; + uniform float _UIMaskSoftnessX; + uniform float _UIMaskSoftnessY; + + v2f vert (appdata_t v) + { + float4 vert = v.vertex; + vert.x += _VertexOffsetX; + vert.y += _VertexOffsetY; + + vert.xy += (vert.w * 0.5) / _ScreenParams.xy; + + float4 vPosition = UnityPixelSnap(UnityObjectToClipPos(vert)); + + fixed4 faceColor = v.color; + faceColor *= _FaceColor; + + v2f OUT; + OUT.vertex = vPosition; + OUT.color = faceColor; + OUT.texcoord0 = v.texcoord0; + OUT.texcoord1 = TRANSFORM_TEX(v.texcoord1, _FaceTex); + float2 pixelSize = vPosition.w; + pixelSize /= abs(float2(_ScreenParams.x * UNITY_MATRIX_P[0][0], _ScreenParams.y * UNITY_MATRIX_P[1][1])); + + // Clamp _ClipRect to 16bit. + const float4 clampedRect = clamp(_ClipRect, -2e10, 2e10); + const half2 maskSoftness = half2(max(_UIMaskSoftnessX, _MaskSoftnessX), max(_UIMaskSoftnessY, _MaskSoftnessY)); + OUT.mask = float4(vert.xy * 2 - clampedRect.xy - clampedRect.zw, 0.25 / (0.25 * maskSoftness + pixelSize.xy)); + + return OUT; + } + + fixed4 frag (v2f IN) : SV_Target + { + fixed4 color = tex2D(_MainTex, IN.texcoord0); + color = fixed4 (tex2D(_FaceTex, IN.texcoord1).rgb * IN.color.rgb, IN.color.a * color.a); + + // Alternative implementation to UnityGet2DClipping with support for softness. + #if UNITY_UI_CLIP_RECT + half2 m = saturate((_ClipRect.zw - _ClipRect.xy - abs(IN.mask.xy)) * IN.mask.zw); + color *= m.x * m.y; + #endif + + #if UNITY_UI_ALPHACLIP + clip(color.a - 0.001); + #endif + + return color; + } + ENDCG + } +} + + CustomEditor "TMPro.EditorUtilities.TMP_BitmapShaderGUI" +} diff --git a/Assets/Resources/TextMesh Pro/Shaders/TMP_Bitmap.shader.meta b/Assets/Resources/TextMesh Pro/Shaders/TMP_Bitmap.shader.meta new file mode 100644 index 0000000..7eb1870 --- /dev/null +++ b/Assets/Resources/TextMesh Pro/Shaders/TMP_Bitmap.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 128e987d567d4e2c824d754223b3f3b0 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/TextMesh Pro/Shaders/TMP_SDF Overlay.shader b/Assets/Resources/TextMesh Pro/Shaders/TMP_SDF Overlay.shader new file mode 100644 index 0000000..82e86ec --- /dev/null +++ b/Assets/Resources/TextMesh Pro/Shaders/TMP_SDF Overlay.shader @@ -0,0 +1,321 @@ +Shader "TextMeshPro/Distance Field Overlay" { + +Properties { + _FaceTex ("Face Texture", 2D) = "white" {} + _FaceUVSpeedX ("Face UV Speed X", Range(-5, 5)) = 0.0 + _FaceUVSpeedY ("Face UV Speed Y", Range(-5, 5)) = 0.0 + _FaceColor ("Face Color", Color) = (1,1,1,1) + _FaceDilate ("Face Dilate", Range(-1,1)) = 0 + + _OutlineColor ("Outline Color", Color) = (0,0,0,1) + _OutlineTex ("Outline Texture", 2D) = "white" {} + _OutlineUVSpeedX ("Outline UV Speed X", Range(-5, 5)) = 0.0 + _OutlineUVSpeedY ("Outline UV Speed Y", Range(-5, 5)) = 0.0 + _OutlineWidth ("Outline Thickness", Range(0, 1)) = 0 + _OutlineSoftness ("Outline Softness", Range(0,1)) = 0 + + _Bevel ("Bevel", Range(0,1)) = 0.5 + _BevelOffset ("Bevel Offset", Range(-0.5,0.5)) = 0 + _BevelWidth ("Bevel Width", Range(-.5,0.5)) = 0 + _BevelClamp ("Bevel Clamp", Range(0,1)) = 0 + _BevelRoundness ("Bevel Roundness", Range(0,1)) = 0 + + _LightAngle ("Light Angle", Range(0.0, 6.2831853)) = 3.1416 + _SpecularColor ("Specular", Color) = (1,1,1,1) + _SpecularPower ("Specular", Range(0,4)) = 2.0 + _Reflectivity ("Reflectivity", Range(5.0,15.0)) = 10 + _Diffuse ("Diffuse", Range(0,1)) = 0.5 + _Ambient ("Ambient", Range(1,0)) = 0.5 + + _BumpMap ("Normal map", 2D) = "bump" {} + _BumpOutline ("Bump Outline", Range(0,1)) = 0 + _BumpFace ("Bump Face", Range(0,1)) = 0 + + _ReflectFaceColor ("Reflection Color", Color) = (0,0,0,1) + _ReflectOutlineColor("Reflection Color", Color) = (0,0,0,1) + _Cube ("Reflection Cubemap", Cube) = "black" { /* TexGen CubeReflect */ } + _EnvMatrixRotation ("Texture Rotation", vector) = (0, 0, 0, 0) + + + _UnderlayColor ("Border Color", Color) = (0,0,0, 0.5) + _UnderlayOffsetX ("Border OffsetX", Range(-1,1)) = 0 + _UnderlayOffsetY ("Border OffsetY", Range(-1,1)) = 0 + _UnderlayDilate ("Border Dilate", Range(-1,1)) = 0 + _UnderlaySoftness ("Border Softness", Range(0,1)) = 0 + + _GlowColor ("Color", Color) = (0, 1, 0, 0.5) + _GlowOffset ("Offset", Range(-1,1)) = 0 + _GlowInner ("Inner", Range(0,1)) = 0.05 + _GlowOuter ("Outer", Range(0,1)) = 0.05 + _GlowPower ("Falloff", Range(1, 0)) = 0.75 + + _WeightNormal ("Weight Normal", float) = 0 + _WeightBold ("Weight Bold", float) = 0.5 + + _ShaderFlags ("Flags", float) = 0 + _ScaleRatioA ("Scale RatioA", float) = 1 + _ScaleRatioB ("Scale RatioB", float) = 1 + _ScaleRatioC ("Scale RatioC", float) = 1 + + _MainTex ("Font Atlas", 2D) = "white" {} + _TextureWidth ("Texture Width", float) = 512 + _TextureHeight ("Texture Height", float) = 512 + _GradientScale ("Gradient Scale", float) = 5.0 + _ScaleX ("Scale X", float) = 1.0 + _ScaleY ("Scale Y", float) = 1.0 + _PerspectiveFilter ("Perspective Correction", Range(0, 1)) = 0.875 + _Sharpness ("Sharpness", Range(-1,1)) = 0 + + _VertexOffsetX ("Vertex OffsetX", float) = 0 + _VertexOffsetY ("Vertex OffsetY", float) = 0 + + _MaskCoord ("Mask Coordinates", vector) = (0, 0, 32767, 32767) + _ClipRect ("Clip Rect", vector) = (-32767, -32767, 32767, 32767) + _MaskSoftnessX ("Mask SoftnessX", float) = 0 + _MaskSoftnessY ("Mask SoftnessY", float) = 0 + + _StencilComp ("Stencil Comparison", Float) = 8 + _Stencil ("Stencil ID", Float) = 0 + _StencilOp ("Stencil Operation", Float) = 0 + _StencilWriteMask ("Stencil Write Mask", Float) = 255 + _StencilReadMask ("Stencil Read Mask", Float) = 255 + + _CullMode ("Cull Mode", Float) = 0 + _ColorMask ("Color Mask", Float) = 15 +} + +SubShader { + + Tags + { + "Queue"="Overlay" + "IgnoreProjector"="True" + "RenderType"="Transparent" + } + + Stencil + { + Ref [_Stencil] + Comp [_StencilComp] + Pass [_StencilOp] + ReadMask [_StencilReadMask] + WriteMask [_StencilWriteMask] + } + + Cull [_CullMode] + ZWrite Off + Lighting Off + Fog { Mode Off } + ZTest Always + Blend One OneMinusSrcAlpha + ColorMask [_ColorMask] + + Pass { + CGPROGRAM + #pragma target 3.0 + #pragma vertex VertShader + #pragma fragment PixShader + #pragma shader_feature __ BEVEL_ON + #pragma shader_feature __ UNDERLAY_ON UNDERLAY_INNER + #pragma shader_feature __ GLOW_ON + + #pragma multi_compile __ UNITY_UI_CLIP_RECT + #pragma multi_compile __ UNITY_UI_ALPHACLIP + + #include "UnityCG.cginc" + #include "UnityUI.cginc" + #include "TMPro_Properties.cginc" + #include "TMPro.cginc" + + struct vertex_t + { + UNITY_VERTEX_INPUT_INSTANCE_ID + float4 position : POSITION; + float3 normal : NORMAL; + fixed4 color : COLOR; + float4 texcoord0 : TEXCOORD0; + float2 texcoord1 : TEXCOORD1; + }; + + struct pixel_t + { + UNITY_VERTEX_INPUT_INSTANCE_ID + UNITY_VERTEX_OUTPUT_STEREO + float4 position : SV_POSITION; + fixed4 color : COLOR; + float2 atlas : TEXCOORD0; // Atlas + float4 param : TEXCOORD1; // alphaClip, scale, bias, weight + float4 mask : TEXCOORD2; // Position in object space(xy), pixel Size(zw) + float3 viewDir : TEXCOORD3; + + #if (UNDERLAY_ON || UNDERLAY_INNER) + float4 texcoord2 : TEXCOORD4; // u,v, scale, bias + fixed4 underlayColor : COLOR1; + #endif + + float4 textures : TEXCOORD5; + }; + + // Used by Unity internally to handle Texture Tiling and Offset. + uniform float4 _FaceTex_ST; + uniform float4 _OutlineTex_ST; + uniform float _UIMaskSoftnessX; + uniform float _UIMaskSoftnessY; + + pixel_t VertShader(vertex_t input) + { + pixel_t output; + + UNITY_INITIALIZE_OUTPUT(pixel_t, output); + UNITY_SETUP_INSTANCE_ID(input); + UNITY_TRANSFER_INSTANCE_ID(input,output); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(output); + + float bold = step(input.texcoord0.w, 0); + + float4 vert = input.position; + vert.x += _VertexOffsetX; + vert.y += _VertexOffsetY; + + float4 vPosition = UnityObjectToClipPos(vert); + + float2 pixelSize = vPosition.w; + pixelSize /= float2(_ScaleX, _ScaleY) * abs(mul((float2x2)UNITY_MATRIX_P, _ScreenParams.xy)); + float scale = rsqrt(dot(pixelSize, pixelSize)); + scale *= abs(input.texcoord0.w) * _GradientScale * (_Sharpness + 1); + if (UNITY_MATRIX_P[3][3] == 0) scale = lerp(abs(scale) * (1 - _PerspectiveFilter), scale, abs(dot(UnityObjectToWorldNormal(input.normal.xyz), normalize(WorldSpaceViewDir(vert))))); + + float weight = lerp(_WeightNormal, _WeightBold, bold) / 4.0; + weight = (weight + _FaceDilate) * _ScaleRatioA * 0.5; + + float bias =(.5 - weight) + (.5 / scale); + + float alphaClip = (1.0 - _OutlineWidth*_ScaleRatioA - _OutlineSoftness*_ScaleRatioA); + + #if GLOW_ON + alphaClip = min(alphaClip, 1.0 - _GlowOffset * _ScaleRatioB - _GlowOuter * _ScaleRatioB); + #endif + + alphaClip = alphaClip / 2.0 - ( .5 / scale) - weight; + + #if (UNDERLAY_ON || UNDERLAY_INNER) + float4 underlayColor = _UnderlayColor; + underlayColor.rgb *= underlayColor.a; + + float bScale = scale; + bScale /= 1 + ((_UnderlaySoftness*_ScaleRatioC) * bScale); + float bBias = (0.5 - weight) * bScale - 0.5 - ((_UnderlayDilate * _ScaleRatioC) * 0.5 * bScale); + + float x = -(_UnderlayOffsetX * _ScaleRatioC) * _GradientScale / _TextureWidth; + float y = -(_UnderlayOffsetY * _ScaleRatioC) * _GradientScale / _TextureHeight; + float2 bOffset = float2(x, y); + #endif + + // Generate UV for the Masking Texture + float4 clampedRect = clamp(_ClipRect, -2e10, 2e10); + float2 maskUV = (vert.xy - clampedRect.xy) / (clampedRect.zw - clampedRect.xy); + + // Support for texture tiling and offset + float2 textureUV = input.texcoord1; + float2 faceUV = TRANSFORM_TEX(textureUV, _FaceTex); + float2 outlineUV = TRANSFORM_TEX(textureUV, _OutlineTex); + + + output.position = vPosition; + output.color = input.color; + output.atlas = input.texcoord0; + output.param = float4(alphaClip, scale, bias, weight); + const half2 maskSoftness = half2(max(_UIMaskSoftnessX, _MaskSoftnessX), max(_UIMaskSoftnessY, _MaskSoftnessY)); + output.mask = half4(vert.xy * 2 - clampedRect.xy - clampedRect.zw, 0.25 / (0.25 * maskSoftness + pixelSize.xy)); + output.viewDir = mul((float3x3)_EnvMatrix, _WorldSpaceCameraPos.xyz - mul(unity_ObjectToWorld, vert).xyz); + #if (UNDERLAY_ON || UNDERLAY_INNER) + output.texcoord2 = float4(input.texcoord0 + bOffset, bScale, bBias); + output.underlayColor = underlayColor; + #endif + output.textures = float4(faceUV, outlineUV); + + return output; + } + + + fixed4 PixShader(pixel_t input) : SV_Target + { + UNITY_SETUP_INSTANCE_ID(input); + + float c = tex2D(_MainTex, input.atlas).a; + + #ifndef UNDERLAY_ON + clip(c - input.param.x); + #endif + + float scale = input.param.y; + float bias = input.param.z; + float weight = input.param.w; + float sd = (bias - c) * scale; + + float outline = (_OutlineWidth * _ScaleRatioA) * scale; + float softness = (_OutlineSoftness * _ScaleRatioA) * scale; + + half4 faceColor = _FaceColor; + half4 outlineColor = _OutlineColor; + + faceColor.rgb *= input.color.rgb; + + faceColor *= tex2D(_FaceTex, input.textures.xy + float2(_FaceUVSpeedX, _FaceUVSpeedY) * _Time.y); + outlineColor *= tex2D(_OutlineTex, input.textures.zw + float2(_OutlineUVSpeedX, _OutlineUVSpeedY) * _Time.y); + + faceColor = GetColor(sd, faceColor, outlineColor, outline, softness); + + #if BEVEL_ON + float3 dxy = float3(0.5 / _TextureWidth, 0.5 / _TextureHeight, 0); + float3 n = GetSurfaceNormal(input.atlas, weight, dxy); + + float3 bump = UnpackNormal(tex2D(_BumpMap, input.textures.xy + float2(_FaceUVSpeedX, _FaceUVSpeedY) * _Time.y)).xyz; + bump *= lerp(_BumpFace, _BumpOutline, saturate(sd + outline * 0.5)); + n = normalize(n- bump); + + float3 light = normalize(float3(sin(_LightAngle), cos(_LightAngle), -1.0)); + + float3 col = GetSpecular(n, light); + faceColor.rgb += col*faceColor.a; + faceColor.rgb *= 1-(dot(n, light)*_Diffuse); + faceColor.rgb *= lerp(_Ambient, 1, n.z*n.z); + + fixed4 reflcol = texCUBE(_Cube, reflect(input.viewDir, -n)); + faceColor.rgb += reflcol.rgb * lerp(_ReflectFaceColor.rgb, _ReflectOutlineColor.rgb, saturate(sd + outline * 0.5)) * faceColor.a; + #endif + + #if UNDERLAY_ON + float d = tex2D(_MainTex, input.texcoord2.xy).a * input.texcoord2.z; + faceColor += input.underlayColor * saturate(d - input.texcoord2.w) * (1 - faceColor.a); + #endif + + #if UNDERLAY_INNER + float d = tex2D(_MainTex, input.texcoord2.xy).a * input.texcoord2.z; + faceColor += input.underlayColor * (1 - saturate(d - input.texcoord2.w)) * saturate(1 - sd) * (1 - faceColor.a); + #endif + + #if GLOW_ON + float4 glowColor = GetGlowColor(sd, scale); + faceColor.rgb += glowColor.rgb * glowColor.a; + #endif + + // Alternative implementation to UnityGet2DClipping with support for softness. + #if UNITY_UI_CLIP_RECT + half2 m = saturate((_ClipRect.zw - _ClipRect.xy - abs(input.mask.xy)) * input.mask.zw); + faceColor *= m.x * m.y; + #endif + + #if UNITY_UI_ALPHACLIP + clip(faceColor.a - 0.001); + #endif + + return faceColor * input.color.a; + } + ENDCG + } +} + +Fallback "TextMeshPro/Mobile/Distance Field" +CustomEditor "TMPro.EditorUtilities.TMP_SDFShaderGUI" +} diff --git a/Assets/Resources/TextMesh Pro/Shaders/TMP_SDF Overlay.shader.meta b/Assets/Resources/TextMesh Pro/Shaders/TMP_SDF Overlay.shader.meta new file mode 100644 index 0000000..56284e9 --- /dev/null +++ b/Assets/Resources/TextMesh Pro/Shaders/TMP_SDF Overlay.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: dd89cf5b9246416f84610a006f916af7 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/TextMesh Pro/Shaders/TMP_SDF SSD.shader b/Assets/Resources/TextMesh Pro/Shaders/TMP_SDF SSD.shader new file mode 100644 index 0000000..a0164f7 --- /dev/null +++ b/Assets/Resources/TextMesh Pro/Shaders/TMP_SDF SSD.shader @@ -0,0 +1,316 @@ +Shader "TextMeshPro/Distance Field SSD" { + +Properties { + _FaceTex ("Face Texture", 2D) = "white" {} + _FaceUVSpeedX ("Face UV Speed X", Range(-5, 5)) = 0.0 + _FaceUVSpeedY ("Face UV Speed Y", Range(-5, 5)) = 0.0 + _FaceColor ("Face Color", Color) = (1,1,1,1) + _FaceDilate ("Face Dilate", Range(-1,1)) = 0 + + _OutlineColor ("Outline Color", Color) = (0,0,0,1) + _OutlineTex ("Outline Texture", 2D) = "white" {} + _OutlineUVSpeedX ("Outline UV Speed X", Range(-5, 5)) = 0.0 + _OutlineUVSpeedY ("Outline UV Speed Y", Range(-5, 5)) = 0.0 + _OutlineWidth ("Outline Thickness", Range(0, 1)) = 0 + _OutlineSoftness ("Outline Softness", Range(0,1)) = 0 + + _Bevel ("Bevel", Range(0,1)) = 0.5 + _BevelOffset ("Bevel Offset", Range(-0.5,0.5)) = 0 + _BevelWidth ("Bevel Width", Range(-.5,0.5)) = 0 + _BevelClamp ("Bevel Clamp", Range(0,1)) = 0 + _BevelRoundness ("Bevel Roundness", Range(0,1)) = 0 + + _LightAngle ("Light Angle", Range(0.0, 6.2831853)) = 3.1416 + _SpecularColor ("Specular", Color) = (1,1,1,1) + _SpecularPower ("Specular", Range(0,4)) = 2.0 + _Reflectivity ("Reflectivity", Range(5.0,15.0)) = 10 + _Diffuse ("Diffuse", Range(0,1)) = 0.5 + _Ambient ("Ambient", Range(1,0)) = 0.5 + + _BumpMap ("Normal map", 2D) = "bump" {} + _BumpOutline ("Bump Outline", Range(0,1)) = 0 + _BumpFace ("Bump Face", Range(0,1)) = 0 + + _ReflectFaceColor ("Reflection Color", Color) = (0,0,0,1) + _ReflectOutlineColor("Reflection Color", Color) = (0,0,0,1) + _Cube ("Reflection Cubemap", Cube) = "black" { /* TexGen CubeReflect */ } + _EnvMatrixRotation ("Texture Rotation", vector) = (0, 0, 0, 0) + + + _UnderlayColor ("Border Color", Color) = (0,0,0, 0.5) + _UnderlayOffsetX ("Border OffsetX", Range(-1,1)) = 0 + _UnderlayOffsetY ("Border OffsetY", Range(-1,1)) = 0 + _UnderlayDilate ("Border Dilate", Range(-1,1)) = 0 + _UnderlaySoftness ("Border Softness", Range(0,1)) = 0 + + _GlowColor ("Color", Color) = (0, 1, 0, 0.5) + _GlowOffset ("Offset", Range(-1,1)) = 0 + _GlowInner ("Inner", Range(0,1)) = 0.05 + _GlowOuter ("Outer", Range(0,1)) = 0.05 + _GlowPower ("Falloff", Range(1, 0)) = 0.75 + + _WeightNormal ("Weight Normal", float) = 0 + _WeightBold ("Weight Bold", float) = 0.5 + + _ShaderFlags ("Flags", float) = 0 + _ScaleRatioA ("Scale RatioA", float) = 1 + _ScaleRatioB ("Scale RatioB", float) = 1 + _ScaleRatioC ("Scale RatioC", float) = 1 + + _MainTex ("Font Atlas", 2D) = "white" {} + _TextureWidth ("Texture Width", float) = 512 + _TextureHeight ("Texture Height", float) = 512 + _GradientScale ("Gradient Scale", float) = 5.0 + _ScaleX ("Scale X", float) = 1.0 + _ScaleY ("Scale Y", float) = 1.0 + _PerspectiveFilter ("Perspective Correction", Range(0, 1)) = 0.875 + _Sharpness ("Sharpness", Range(-1,1)) = 0 + + _VertexOffsetX ("Vertex OffsetX", float) = 0 + _VertexOffsetY ("Vertex OffsetY", float) = 0 + + _MaskCoord ("Mask Coordinates", vector) = (0, 0, 32767, 32767) + _ClipRect ("Clip Rect", vector) = (-32767, -32767, 32767, 32767) + _MaskSoftnessX ("Mask SoftnessX", float) = 0 + _MaskSoftnessY ("Mask SoftnessY", float) = 0 + + _StencilComp ("Stencil Comparison", Float) = 8 + _Stencil ("Stencil ID", Float) = 0 + _StencilOp ("Stencil Operation", Float) = 0 + _StencilWriteMask ("Stencil Write Mask", Float) = 255 + _StencilReadMask ("Stencil Read Mask", Float) = 255 + + _CullMode ("Cull Mode", Float) = 0 + _ColorMask ("Color Mask", Float) = 15 +} + +SubShader { + Tags + { + "Queue" = "Transparent" + "IgnoreProjector" = "True" + "RenderType" = "Transparent" + } + + Stencil + { + Ref[_Stencil] + Comp[_StencilComp] + Pass[_StencilOp] + ReadMask[_StencilReadMask] + WriteMask[_StencilWriteMask] + } + + Cull[_CullMode] + ZWrite Off + Lighting Off + Fog { Mode Off } + ZTest[unity_GUIZTestMode] + Blend One OneMinusSrcAlpha + ColorMask[_ColorMask] + + Pass + { + CGPROGRAM + #pragma target 3.0 + #pragma vertex VertShader + #pragma fragment PixShader + #pragma shader_feature __ BEVEL_ON + #pragma shader_feature __ UNDERLAY_ON UNDERLAY_INNER + #pragma shader_feature __ GLOW_ON + #pragma shader_feature __ FORCE_LINEAR + + #pragma multi_compile __ UNITY_UI_CLIP_RECT + #pragma multi_compile __ UNITY_UI_ALPHACLIP + + #include "UnityCG.cginc" + #include "UnityUI.cginc" + #include "TMPro_Properties.cginc" + #include "TMPro.cginc" + + struct vertex_t + { + UNITY_VERTEX_INPUT_INSTANCE_ID + float4 position : POSITION; + float3 normal : NORMAL; + float4 color : COLOR; + float4 texcoord0 : TEXCOORD0; + float2 texcoord1 : TEXCOORD1; + }; + + struct pixel_t + { + UNITY_VERTEX_INPUT_INSTANCE_ID + UNITY_VERTEX_OUTPUT_STEREO + float4 position : SV_POSITION; + float4 color : COLOR; + float2 atlas : TEXCOORD0; + float weight : TEXCOORD1; + float2 mask : TEXCOORD2; // Position in object space(xy) + float3 viewDir : TEXCOORD3; + + #if (UNDERLAY_ON || UNDERLAY_INNER) + float2 texcoord2 : TEXCOORD4; + float4 underlayColor : COLOR1; + #endif + + float4 textures : TEXCOORD5; + }; + + // Used by Unity internally to handle Texture Tiling and Offset. + float4 _FaceTex_ST; + float4 _OutlineTex_ST; + float _UIMaskSoftnessX; + float _UIMaskSoftnessY; + + float4 SRGBToLinear(float4 rgba) + { + return float4(lerp(rgba.rgb / 12.92f, pow((rgba.rgb + 0.055f) / 1.055f, 2.4f), step(0.04045f, rgba.rgb)), rgba.a); + } + + pixel_t VertShader(vertex_t input) + { + pixel_t output; + + UNITY_INITIALIZE_OUTPUT(pixel_t, output); + UNITY_SETUP_INSTANCE_ID(input); + UNITY_TRANSFER_INSTANCE_ID(input,output); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(output); + + float bold = step(input.texcoord0.w, 0); + + float4 vert = input.position; + vert.x += _VertexOffsetX; + vert.y += _VertexOffsetY; + + float4 vPosition = UnityObjectToClipPos(vert); + + float weight = lerp(_WeightNormal, _WeightBold, bold) / 4.0; + weight = (weight + _FaceDilate) * _ScaleRatioA * 0.5; + + #if (UNDERLAY_ON || UNDERLAY_INNER) + float4 underlayColor = _UnderlayColor; + underlayColor.rgb *= underlayColor.a; + + float x = -(_UnderlayOffsetX * _ScaleRatioC) * _GradientScale / _TextureWidth; + float y = -(_UnderlayOffsetY * _ScaleRatioC) * _GradientScale / _TextureHeight; + float2 bOffset = float2(x, y); + #endif + + // Generate UV for the Masking Texture + float4 clampedRect = clamp(_ClipRect, -2e10, 2e10); + + // Support for texture tiling and offset + float2 textureUV = input.texcoord1; + float2 faceUV = TRANSFORM_TEX(textureUV, _FaceTex); + float2 outlineUV = TRANSFORM_TEX(textureUV, _OutlineTex); + + float4 color = input.color; + #if (FORCE_LINEAR && !UNITY_COLORSPACE_GAMMA) + color = SRGBToLinear(input.color); + #endif + + output.position = vPosition; + output.color = color; + output.atlas = input.texcoord0; + output.weight = weight; + output.mask = half2(vert.xy * 2 - clampedRect.xy - clampedRect.zw); + output.viewDir = mul((float3x3)_EnvMatrix, _WorldSpaceCameraPos.xyz - mul(unity_ObjectToWorld, vert).xyz); + #if (UNDERLAY_ON || UNDERLAY_INNER) + output.texcoord2 = input.texcoord0 + bOffset; + output.underlayColor = underlayColor; + #endif + output.textures = float4(faceUV, outlineUV); + + return output; + } + + + fixed4 PixShader(pixel_t input) : SV_Target + { + UNITY_SETUP_INSTANCE_ID(input); + + float c = tex2D(_MainTex, input.atlas).a; + + float pixelSize = abs(ddx(input.atlas.y)) + abs(ddy(input.atlas.y)); + pixelSize *= _TextureHeight * 0.75; + float scale = 1 / pixelSize * _GradientScale * (_Sharpness + 1); + + float weight = input.weight; + float bias = (.5 - weight) + (.5 / scale); + float sd = (bias - c) * scale; + + float outline = (_OutlineWidth * _ScaleRatioA) * scale; + float softness = (_OutlineSoftness * _ScaleRatioA) * scale; + + half4 faceColor = _FaceColor; + half4 outlineColor = _OutlineColor; + + faceColor.rgb *= input.color.rgb; + + faceColor *= tex2D(_FaceTex, input.textures.xy + float2(_FaceUVSpeedX, _FaceUVSpeedY) * _Time.y); + outlineColor *= tex2D(_OutlineTex, input.textures.zw + float2(_OutlineUVSpeedX, _OutlineUVSpeedY) * _Time.y); + + faceColor = GetColor(sd, faceColor, outlineColor, outline, softness); + + #if BEVEL_ON + float3 dxy = float3(0.5 / _TextureWidth, 0.5 / _TextureHeight, 0); + float3 n = GetSurfaceNormal(input.atlas, weight, dxy); + + float3 bump = UnpackNormal(tex2D(_BumpMap, input.textures.xy + float2(_FaceUVSpeedX, _FaceUVSpeedY) * _Time.y)).xyz; + bump *= lerp(_BumpFace, _BumpOutline, saturate(sd + outline * 0.5)); + n = normalize(n - bump); + + float3 light = normalize(float3(sin(_LightAngle), cos(_LightAngle), -1.0)); + + float3 col = GetSpecular(n, light); + faceColor.rgb += col * faceColor.a; + faceColor.rgb *= 1 - (dot(n, light) * _Diffuse); + faceColor.rgb *= lerp(_Ambient, 1, n.z * n.z); + + fixed4 reflcol = texCUBE(_Cube, reflect(input.viewDir, -n)); + faceColor.rgb += reflcol.rgb * lerp(_ReflectFaceColor.rgb, _ReflectOutlineColor.rgb, saturate(sd + outline * 0.5)) * faceColor.a; + #endif + + #if (UNDERLAY_ON || UNDERLAY_INNER) + float bScale = scale; + bScale /= 1 + ((_UnderlaySoftness * _ScaleRatioC) * bScale); + float bBias = (0.5 - weight) * bScale - 0.5 - ((_UnderlayDilate * _ScaleRatioC) * 0.5 * bScale); + #endif + + #if UNDERLAY_ON + float d = tex2D(_MainTex, input.texcoord2.xy).a * bScale; + faceColor += input.underlayColor * saturate(d - bBias) * (1 - faceColor.a); + #endif + + #if UNDERLAY_INNER + float d = tex2D(_MainTex, input.texcoord2.xy).a * bScale; + faceColor += input.underlayColor * (1 - saturate(d - bBias)) * saturate(1 - sd) * (1 - faceColor.a); + #endif + + #if GLOW_ON + float4 glowColor = GetGlowColor(sd, scale); + faceColor.rgb += glowColor.rgb * glowColor.a; + #endif + + // Alternative implementation to UnityGet2DClipping with support for softness. + #if UNITY_UI_CLIP_RECT + half2 maskSoftness = half2(max(_UIMaskSoftnessX, _MaskSoftnessX), max(_UIMaskSoftnessY, _MaskSoftnessY)); + float2 maskZW = 0.25 / (0.25 * maskSoftness + 1 / scale); + half2 m = saturate((_ClipRect.zw - _ClipRect.xy - abs(input.mask.xy)) * maskZW); + faceColor *= m.x * m.y; + #endif + + #if UNITY_UI_ALPHACLIP + clip(faceColor.a - 0.001); + #endif + + return faceColor * input.color.a; + } + ENDCG + } +} + +Fallback "TextMeshPro/Mobile/Distance Field" +CustomEditor "TMPro.EditorUtilities.TMP_SDFShaderGUI" +} diff --git a/Assets/Resources/TextMesh Pro/Shaders/TMP_SDF SSD.shader.meta b/Assets/Resources/TextMesh Pro/Shaders/TMP_SDF SSD.shader.meta new file mode 100644 index 0000000..08cd8ae --- /dev/null +++ b/Assets/Resources/TextMesh Pro/Shaders/TMP_SDF SSD.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 14eb328de4b8eb245bb7cea29e4ac00b +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/TextMesh Pro/Shaders/TMP_SDF-HDRP LIT.shadergraph b/Assets/Resources/TextMesh Pro/Shaders/TMP_SDF-HDRP LIT.shadergraph new file mode 100644 index 0000000..a999b6e --- /dev/null +++ b/Assets/Resources/TextMesh Pro/Shaders/TMP_SDF-HDRP LIT.shadergraph @@ -0,0 +1,11507 @@ +{ + "m_SGVersion": 2, + "m_Type": "UnityEditor.ShaderGraph.GraphData", + "m_ObjectId": "386c36a1c4c34ea29deb680fb82cfe8b", + "m_Properties": [ + { + "m_Id": "dc75c4e3a1bc4bb0a128086c2b0679a5" + }, + { + "m_Id": "867a4ae13c0d4a028c71bc1063824c14" + }, + { + "m_Id": "22b7f3c2bb7b48c0a7fdeb50e33e7d5e" + }, + { + "m_Id": "53073e5ea924459fa6681a4943e9f947" + }, + { + "m_Id": "7a046f410ce64aa88438b0bfd412c045" + }, + { + "m_Id": "636180f6e0504f2baaa5cc086980cb47" + }, + { + "m_Id": "74b41464cbed4e9e8e23af5ab9be40cf" + }, + { + "m_Id": "8ed907a2cc7949b68a283ae243ea1977" + }, + { + "m_Id": "cb3c0c3f08654b068bea44c4ffb15f4a" + }, + { + "m_Id": "0580d4b7e3a049049569f4508643a724" + }, + { + "m_Id": "c9ec735d1a1046769e5601b2c97c849a" + }, + { + "m_Id": "2d0a269511e34bd1ba9056d2c939dff2" + }, + { + "m_Id": "07946387933e416db576b677f0711e5f" + }, + { + "m_Id": "46fbf3eeb0ea4470869cba7443249295" + }, + { + "m_Id": "ec79eb447dfd47a9b3380344c6a60f43" + }, + { + "m_Id": "3fdf4b7bc5d4426492dcc057603ef4a6" + }, + { + "m_Id": "8cf8aae64c1d443f9303126886b40f17" + }, + { + "m_Id": "49e7c3ad55ce458797f0e60c950cb965" + }, + { + "m_Id": "81e8ed0534534674a74263e6161a2a1a" + }, + { + "m_Id": "952d0fa5cd744df0b434cd38e9a90b93" + }, + { + "m_Id": "21a7a380e66d42e780e2a2a1baa630d5" + }, + { + "m_Id": "2c10b97b92c947ceb307a93759c0228b" + }, + { + "m_Id": "1be90d4f96a841748b0c95219b12ad27" + }, + { + "m_Id": "5fbe253f3e444f2aa8ac717f9c856619" + }, + { + "m_Id": "5bd258837c514ff7ab0bf7027e762c18" + }, + { + "m_Id": "998db5e5901e45b29040eb2099370071" + }, + { + "m_Id": "a6c38edd2e8743a9b057ba8452b9f129" + }, + { + "m_Id": "82af2db1018543d7832af96c1cfc981f" + }, + { + "m_Id": "3ec4797e381747829ef4712c85fcf7a1" + }, + { + "m_Id": "b0b352c4503a43d083a64e57352b29a0" + }, + { + "m_Id": "424dbeeb009344efa29c304c4979e3d6" + }, + { + "m_Id": "05805bc6fcc941fd889922555c6c86d7" + }, + { + "m_Id": "a4ad98d8828c424384229c344ebe2ed0" + }, + { + "m_Id": "3e372195f4bd4845852a37839e5b602d" + }, + { + "m_Id": "a6bbb32e8d884be9bb36db91fe4b81b1" + } + ], + "m_Keywords": [], + "m_Nodes": [ + { + "m_Id": "b1188549725543d485436c2e921ffbb2" + }, + { + "m_Id": "4488af8ff6a7421298a7e827f567263b" + }, + { + "m_Id": "7e0fadb2533f496192c1ad3e78642010" + }, + { + "m_Id": "aa87c72ac0e64469acc34f936f00b3d0" + }, + { + "m_Id": "105b1ed1aa714e41bbe1ef5472bdb11f" + }, + { + "m_Id": "150533bad8e2424aaa2c74e253af8592" + }, + { + "m_Id": "1c4df61c2fea404eb3b87b270d7c59bc" + }, + { + "m_Id": "8135ca333f8f4ea78163743e6ec1f55c" + }, + { + "m_Id": "36f1b4d96f2941c39e5cd95d9c1d2ce6" + }, + { + "m_Id": "9c228fac287d446296b91a4acf5cec59" + }, + { + "m_Id": "52798bdb86f6400e86489a7a368e9f8b" + }, + { + "m_Id": "f383b24f0bc6434dafe44b3e3d338a63" + }, + { + "m_Id": "85a1ad8e741e41759002e8cdc8cd0b96" + }, + { + "m_Id": "f3d31c1f18d8491a8ecf5cbc37e4b7db" + }, + { + "m_Id": "f23a8b2b7c85478388ff7a8c8a6de740" + }, + { + "m_Id": "e818605f8f5a4f01bf61caaa33693581" + }, + { + "m_Id": "85b5940eb77e4625812ded7215bab8d7" + }, + { + "m_Id": "cdddee3a537c464697357f11b966f9b8" + }, + { + "m_Id": "88253223d2c34ecfab92b0c344048f94" + }, + { + "m_Id": "c7ddee91dc5b48dc828309c77fdb0b88" + }, + { + "m_Id": "1e12726617b24675958e942eb62e4b09" + }, + { + "m_Id": "2ac79705aa9e415dbb74ec215233fd1b" + }, + { + "m_Id": "44317f2e371447e2a8d894f8a021a235" + }, + { + "m_Id": "7984fd094e1147bdabb4e26fbd3d31c8" + }, + { + "m_Id": "91890fe48ebe4717aea61ecaf3ad4861" + }, + { + "m_Id": "19075add867e4757b9520d18fe8de1d0" + }, + { + "m_Id": "fdb77c3e92ee497b88ca5dc46dc45350" + }, + { + "m_Id": "c234e5216678436195ee1a5914bc79da" + }, + { + "m_Id": "4648b46ad29a4008a80de4f8a5a5b813" + }, + { + "m_Id": "59bd90a849624124bae6464ee3669aa6" + }, + { + "m_Id": "a535f3bcbeb14622bb177eb6f46e76f4" + }, + { + "m_Id": "9e87ce9607e14015a3790c528ca5dfda" + }, + { + "m_Id": "285f6a9863d54ed2a8150727ad749456" + }, + { + "m_Id": "b163c9f1666644b0bba62cf0e12df7bc" + }, + { + "m_Id": "a455bd79094c4413a7b7dd80ca8b9368" + }, + { + "m_Id": "dbcb748279484a4590e53518c49122b8" + }, + { + "m_Id": "04dc152dd2ba4d519391577eb1156235" + }, + { + "m_Id": "9f0de188085746d5a19073da1de85ddb" + }, + { + "m_Id": "ec184d6d9fb2494897774c9e7d279e6d" + }, + { + "m_Id": "95928bcb6a284b8d88105a84c2e1d3ce" + }, + { + "m_Id": "4f194ff591484e908fc2bcdacbcf2570" + }, + { + "m_Id": "6e8946a245e842b38231d4a241bfb3ef" + }, + { + "m_Id": "cb7117ecb1d047a8b2cb00ed552cb181" + }, + { + "m_Id": "3c50439118b2496f9e390021b0964606" + }, + { + "m_Id": "3e231021af7b47ba97f2871e7f25d0fe" + }, + { + "m_Id": "aa3e347d733e48f7b65d8a8847370eec" + }, + { + "m_Id": "2a552a0b828f457c911aa19561e410ae" + }, + { + "m_Id": "acd0cd5a177f4a97bf23db7219305e3f" + }, + { + "m_Id": "51378bae98a94c309785d14cd5cbb453" + }, + { + "m_Id": "9e6e50a71d9843b49b62ebe1cf7d3d59" + }, + { + "m_Id": "7444469eb9884253819add9ef96baa25" + }, + { + "m_Id": "67a519f507384ff1861df5d8d5b486be" + }, + { + "m_Id": "48390d02257d41bf98eace1deaa4c539" + }, + { + "m_Id": "f4ecc442a2d246759f7c2c0412953d28" + }, + { + "m_Id": "7f2e6b5f15364ed9835d67d0cf4f8f65" + }, + { + "m_Id": "aca823a8188948c782eddaf0f45e1868" + }, + { + "m_Id": "7d78a616c2754cc28d1f32cf66ade611" + }, + { + "m_Id": "163beb4431c34f538340bc0af0991e6f" + }, + { + "m_Id": "39f2f84f30304d859fb07569e2695f60" + }, + { + "m_Id": "42a586e4f6ec40eeaba891b7fd133864" + }, + { + "m_Id": "4abff6ff92fa4a05b203f10580988335" + }, + { + "m_Id": "319916a5921343f7b7eef0e50dc93def" + }, + { + "m_Id": "f814deb543c24fbbafbcdb5071d96022" + }, + { + "m_Id": "65c8e64a7535466e933eed08a2f77532" + }, + { + "m_Id": "63c7cd57fc3c45a9a97b514fdae32693" + }, + { + "m_Id": "d4df208fc23b42f2b52364124f1b661c" + }, + { + "m_Id": "9d3c3383d5934a17bf9efbb7fd9e9043" + }, + { + "m_Id": "aef5c44f84e04c3185e0b93e95e34204" + }, + { + "m_Id": "c9d7f0dbae7d422985a1cc87c025e76b" + }, + { + "m_Id": "faace8101df943d8956faa31728cb004" + }, + { + "m_Id": "007c75c776ac4f1babe9cd7ae1fc4f14" + }, + { + "m_Id": "b571db753a1948d5a6f1de4e7d0c7238" + }, + { + "m_Id": "9147636b0cfa466a9b37a013d8f693bf" + }, + { + "m_Id": "bc9afcb18afa4ccc82d2cdc34d3f4641" + }, + { + "m_Id": "b4a40cb6acd441acb83cfe0240bf910d" + }, + { + "m_Id": "56c25395796e4d2fbe5c892d428d1620" + }, + { + "m_Id": "6b2f65c1463f4f7bad16c54a95d2fe75" + }, + { + "m_Id": "109f638d1f9b49d4991d6d21a86d4eb7" + }, + { + "m_Id": "dff7a66b353a4023b29c9d937da77960" + }, + { + "m_Id": "7a80e8839f0e4a1d9a6c0814f8793ee6" + }, + { + "m_Id": "7d7696aa6d184b4fb9c316a9dec37aee" + }, + { + "m_Id": "ec1f2e8bc9fd4ae38b133c60ee6c49b8" + }, + { + "m_Id": "2db15d90c2204143b225ec4ef08d0755" + }, + { + "m_Id": "e591df3a1eb94e259b762f2830b407e2" + }, + { + "m_Id": "bc782d8e80154073b48a687a07adf60a" + }, + { + "m_Id": "2786e48f93f54a82aee4303ce7b63c82" + }, + { + "m_Id": "7f7d8028b58d4227a4560891be6e7cda" + }, + { + "m_Id": "f5a8bfcec21a4dac9df63993ec53635e" + }, + { + "m_Id": "be58359e488f42e9b5121357d0fa526b" + } + ], + "m_GroupDatas": [ + { + "m_Id": "484b51c50485473b819c4f05087b32d7" + }, + { + "m_Id": "d0a791a544614667962a9a9a9ce0c68a" + }, + { + "m_Id": "42cadae0923e4969b50bbc3f78185934" + }, + { + "m_Id": "ecf16c34d46f4502ac601f0c38c7576b" + }, + { + "m_Id": "98934a69591249d5b8b92b39045359a3" + }, + { + "m_Id": "013228b0fdf1424097798f0973a9a4fb" + }, + { + "m_Id": "d258902c6ec74942afdb9ebf8c1d07f8" + }, + { + "m_Id": "daaf032a109749a88c9b8ff8e1f8b541" + } + ], + "m_StickyNoteDatas": [], + "m_Edges": [ + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "007c75c776ac4f1babe9cd7ae1fc4f14" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "b571db753a1948d5a6f1de4e7d0c7238" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "04dc152dd2ba4d519391577eb1156235" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "b163c9f1666644b0bba62cf0e12df7bc" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "105b1ed1aa714e41bbe1ef5472bdb11f" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "b4a40cb6acd441acb83cfe0240bf910d" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "109f638d1f9b49d4991d6d21a86d4eb7" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "ec1f2e8bc9fd4ae38b133c60ee6c49b8" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "150533bad8e2424aaa2c74e253af8592" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "319916a5921343f7b7eef0e50dc93def" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "150533bad8e2424aaa2c74e253af8592" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "65c8e64a7535466e933eed08a2f77532" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "150533bad8e2424aaa2c74e253af8592" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "9c228fac287d446296b91a4acf5cec59" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "150533bad8e2424aaa2c74e253af8592" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "f814deb543c24fbbafbcdb5071d96022" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "163beb4431c34f538340bc0af0991e6f" + }, + "m_SlotId": 4 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "7984fd094e1147bdabb4e26fbd3d31c8" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "19075add867e4757b9520d18fe8de1d0" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "e818605f8f5a4f01bf61caaa33693581" + }, + "m_SlotId": 5 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "1c4df61c2fea404eb3b87b270d7c59bc" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "e818605f8f5a4f01bf61caaa33693581" + }, + "m_SlotId": 4 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "1e12726617b24675958e942eb62e4b09" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "dff7a66b353a4023b29c9d937da77960" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "285f6a9863d54ed2a8150727ad749456" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "59bd90a849624124bae6464ee3669aa6" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "2a552a0b828f457c911aa19561e410ae" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "51378bae98a94c309785d14cd5cbb453" + }, + "m_SlotId": 6 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "2ac79705aa9e415dbb74ec215233fd1b" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "7984fd094e1147bdabb4e26fbd3d31c8" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "2db15d90c2204143b225ec4ef08d0755" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "fdb77c3e92ee497b88ca5dc46dc45350" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "319916a5921343f7b7eef0e50dc93def" + }, + "m_SlotId": 7 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "4abff6ff92fa4a05b203f10580988335" + }, + "m_SlotId": 2 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "36f1b4d96f2941c39e5cd95d9c1d2ce6" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "85a1ad8e741e41759002e8cdc8cd0b96" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "39f2f84f30304d859fb07569e2695f60" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "163beb4431c34f538340bc0af0991e6f" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "3e231021af7b47ba97f2871e7f25d0fe" + }, + "m_SlotId": 5 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "6e8946a245e842b38231d4a241bfb3ef" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "42a586e4f6ec40eeaba891b7fd133864" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "cdddee3a537c464697357f11b966f9b8" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "44317f2e371447e2a8d894f8a021a235" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "2ac79705aa9e415dbb74ec215233fd1b" + }, + "m_SlotId": 3 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "4488af8ff6a7421298a7e827f567263b" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "44317f2e371447e2a8d894f8a021a235" + }, + "m_SlotId": 3 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "4648b46ad29a4008a80de4f8a5a5b813" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "c234e5216678436195ee1a5914bc79da" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "4abff6ff92fa4a05b203f10580988335" + }, + "m_SlotId": 4 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "e818605f8f5a4f01bf61caaa33693581" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "4f194ff591484e908fc2bcdacbcf2570" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "9f0de188085746d5a19073da1de85ddb" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "51378bae98a94c309785d14cd5cbb453" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "aa3e347d733e48f7b65d8a8847370eec" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "51378bae98a94c309785d14cd5cbb453" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "aca823a8188948c782eddaf0f45e1868" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "52798bdb86f6400e86489a7a368e9f8b" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "f383b24f0bc6434dafe44b3e3d338a63" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "56c25395796e4d2fbe5c892d428d1620" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "7a80e8839f0e4a1d9a6c0814f8793ee6" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "59bd90a849624124bae6464ee3669aa6" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "f23a8b2b7c85478388ff7a8c8a6de740" + }, + "m_SlotId": 4 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "63c7cd57fc3c45a9a97b514fdae32693" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "56c25395796e4d2fbe5c892d428d1620" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "65c8e64a7535466e933eed08a2f77532" + }, + "m_SlotId": 7 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "4abff6ff92fa4a05b203f10580988335" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "67a519f507384ff1861df5d8d5b486be" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "51378bae98a94c309785d14cd5cbb453" + }, + "m_SlotId": 4 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "6b2f65c1463f4f7bad16c54a95d2fe75" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "7d7696aa6d184b4fb9c316a9dec37aee" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "7444469eb9884253819add9ef96baa25" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "51378bae98a94c309785d14cd5cbb453" + }, + "m_SlotId": 2 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "7984fd094e1147bdabb4e26fbd3d31c8" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "91890fe48ebe4717aea61ecaf3ad4861" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "7a80e8839f0e4a1d9a6c0814f8793ee6" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "65c8e64a7535466e933eed08a2f77532" + }, + "m_SlotId": 2 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "7d7696aa6d184b4fb9c316a9dec37aee" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "319916a5921343f7b7eef0e50dc93def" + }, + "m_SlotId": 2 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "7d78a616c2754cc28d1f32cf66ade611" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "f23a8b2b7c85478388ff7a8c8a6de740" + }, + "m_SlotId": 3 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "7e0fadb2533f496192c1ad3e78642010" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "88253223d2c34ecfab92b0c344048f94" + }, + "m_SlotId": 5 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "8135ca333f8f4ea78163743e6ec1f55c" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "f23a8b2b7c85478388ff7a8c8a6de740" + }, + "m_SlotId": 5 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "85a1ad8e741e41759002e8cdc8cd0b96" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "88253223d2c34ecfab92b0c344048f94" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "85a1ad8e741e41759002e8cdc8cd0b96" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "e818605f8f5a4f01bf61caaa33693581" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "85b5940eb77e4625812ded7215bab8d7" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "f23a8b2b7c85478388ff7a8c8a6de740" + }, + "m_SlotId": 6 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "88253223d2c34ecfab92b0c344048f94" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "44317f2e371447e2a8d894f8a021a235" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "9147636b0cfa466a9b37a013d8f693bf" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "faace8101df943d8956faa31728cb004" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "91890fe48ebe4717aea61ecaf3ad4861" + }, + "m_SlotId": 1 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "3e231021af7b47ba97f2871e7f25d0fe" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "91890fe48ebe4717aea61ecaf3ad4861" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "3e231021af7b47ba97f2871e7f25d0fe" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "91890fe48ebe4717aea61ecaf3ad4861" + }, + "m_SlotId": 3 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "3e231021af7b47ba97f2871e7f25d0fe" + }, + "m_SlotId": 2 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "91890fe48ebe4717aea61ecaf3ad4861" + }, + "m_SlotId": 4 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "cb7117ecb1d047a8b2cb00ed552cb181" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "95928bcb6a284b8d88105a84c2e1d3ce" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "a455bd79094c4413a7b7dd80ca8b9368" + }, + "m_SlotId": 4 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "9c228fac287d446296b91a4acf5cec59" + }, + "m_SlotId": 7 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "4abff6ff92fa4a05b203f10580988335" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "9d3c3383d5934a17bf9efbb7fd9e9043" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "7a80e8839f0e4a1d9a6c0814f8793ee6" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "9d3c3383d5934a17bf9efbb7fd9e9043" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "7d7696aa6d184b4fb9c316a9dec37aee" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "9d3c3383d5934a17bf9efbb7fd9e9043" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "ec1f2e8bc9fd4ae38b133c60ee6c49b8" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "9e6e50a71d9843b49b62ebe1cf7d3d59" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "acd0cd5a177f4a97bf23db7219305e3f" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "9e87ce9607e14015a3790c528ca5dfda" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "c234e5216678436195ee1a5914bc79da" + }, + "m_SlotId": 4 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "9f0de188085746d5a19073da1de85ddb" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "7d78a616c2754cc28d1f32cf66ade611" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "a455bd79094c4413a7b7dd80ca8b9368" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "b163c9f1666644b0bba62cf0e12df7bc" + }, + "m_SlotId": 2 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "a535f3bcbeb14622bb177eb6f46e76f4" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "c234e5216678436195ee1a5914bc79da" + }, + "m_SlotId": 3 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "aa3e347d733e48f7b65d8a8847370eec" + }, + "m_SlotId": 1 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "2ac79705aa9e415dbb74ec215233fd1b" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "aa87c72ac0e64469acc34f936f00b3d0" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "88253223d2c34ecfab92b0c344048f94" + }, + "m_SlotId": 4 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "acd0cd5a177f4a97bf23db7219305e3f" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "51378bae98a94c309785d14cd5cbb453" + }, + "m_SlotId": 5 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "acd0cd5a177f4a97bf23db7219305e3f" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "51378bae98a94c309785d14cd5cbb453" + }, + "m_SlotId": 7 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "aef5c44f84e04c3185e0b93e95e34204" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "109f638d1f9b49d4991d6d21a86d4eb7" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "b1188549725543d485436c2e921ffbb2" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "7d78a616c2754cc28d1f32cf66ade611" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "b163c9f1666644b0bba62cf0e12df7bc" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "9f0de188085746d5a19073da1de85ddb" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "b4a40cb6acd441acb83cfe0240bf910d" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "dff7a66b353a4023b29c9d937da77960" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "b571db753a1948d5a6f1de4e7d0c7238" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "bc9afcb18afa4ccc82d2cdc34d3f4641" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "b571db753a1948d5a6f1de4e7d0c7238" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "bc9afcb18afa4ccc82d2cdc34d3f4641" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "bc9afcb18afa4ccc82d2cdc34d3f4641" + }, + "m_SlotId": 6 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "faace8101df943d8956faa31728cb004" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "c234e5216678436195ee1a5914bc79da" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "fdb77c3e92ee497b88ca5dc46dc45350" + }, + "m_SlotId": 2 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "c7ddee91dc5b48dc828309c77fdb0b88" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "88253223d2c34ecfab92b0c344048f94" + }, + "m_SlotId": 3 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "c9d7f0dbae7d422985a1cc87c025e76b" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "e818605f8f5a4f01bf61caaa33693581" + }, + "m_SlotId": 6 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "cdddee3a537c464697357f11b966f9b8" + }, + "m_SlotId": 7 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "88253223d2c34ecfab92b0c344048f94" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "d4df208fc23b42f2b52364124f1b661c" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "6b2f65c1463f4f7bad16c54a95d2fe75" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "dbcb748279484a4590e53518c49122b8" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "a455bd79094c4413a7b7dd80ca8b9368" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "dff7a66b353a4023b29c9d937da77960" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "cdddee3a537c464697357f11b966f9b8" + }, + "m_SlotId": 2 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "e818605f8f5a4f01bf61caaa33693581" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "f23a8b2b7c85478388ff7a8c8a6de740" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "ec184d6d9fb2494897774c9e7d279e6d" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "a455bd79094c4413a7b7dd80ca8b9368" + }, + "m_SlotId": 3 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "ec1f2e8bc9fd4ae38b133c60ee6c49b8" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "f814deb543c24fbbafbcdb5071d96022" + }, + "m_SlotId": 2 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "f23a8b2b7c85478388ff7a8c8a6de740" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "aa3e347d733e48f7b65d8a8847370eec" + }, + "m_SlotId": 2 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "f383b24f0bc6434dafe44b3e3d338a63" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "85a1ad8e741e41759002e8cdc8cd0b96" + }, + "m_SlotId": 3 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "f3d31c1f18d8491a8ecf5cbc37e4b7db" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "e818605f8f5a4f01bf61caaa33693581" + }, + "m_SlotId": 3 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "f814deb543c24fbbafbcdb5071d96022" + }, + "m_SlotId": 7 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "4abff6ff92fa4a05b203f10580988335" + }, + "m_SlotId": 3 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "faace8101df943d8956faa31728cb004" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "109f638d1f9b49d4991d6d21a86d4eb7" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "faace8101df943d8956faa31728cb004" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "56c25395796e4d2fbe5c892d428d1620" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "faace8101df943d8956faa31728cb004" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "6b2f65c1463f4f7bad16c54a95d2fe75" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "faace8101df943d8956faa31728cb004" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "b4a40cb6acd441acb83cfe0240bf910d" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "fdb77c3e92ee497b88ca5dc46dc45350" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "59bd90a849624124bae6464ee3669aa6" + }, + "m_SlotId": 1 + } + } + ], + "m_VertexContext": { + "m_Position": { + "x": -2506.000244140625, + "y": -3749.0 + }, + "m_Blocks": [ + { + "m_Id": "48390d02257d41bf98eace1deaa4c539" + }, + { + "m_Id": "f4ecc442a2d246759f7c2c0412953d28" + }, + { + "m_Id": "7f2e6b5f15364ed9835d67d0cf4f8f65" + } + ] + }, + "m_FragmentContext": { + "m_Position": { + "x": -2506.000244140625, + "y": -3480.0 + }, + "m_Blocks": [ + { + "m_Id": "aca823a8188948c782eddaf0f45e1868" + }, + { + "m_Id": "6e8946a245e842b38231d4a241bfb3ef" + }, + { + "m_Id": "cb7117ecb1d047a8b2cb00ed552cb181" + }, + { + "m_Id": "3c50439118b2496f9e390021b0964606" + }, + { + "m_Id": "e591df3a1eb94e259b762f2830b407e2" + }, + { + "m_Id": "bc782d8e80154073b48a687a07adf60a" + }, + { + "m_Id": "2786e48f93f54a82aee4303ce7b63c82" + }, + { + "m_Id": "7f7d8028b58d4227a4560891be6e7cda" + }, + { + "m_Id": "f5a8bfcec21a4dac9df63993ec53635e" + }, + { + "m_Id": "be58359e488f42e9b5121357d0fa526b" + } + ] + }, + "m_PreviewData": { + "serializedMesh": { + "m_SerializedMesh": "{\"mesh\":{\"fileID\":10210,\"guid\":\"0000000000000000e000000000000000\",\"type\":0}}", + "m_Guid": "" + } + }, + "m_Path": "TextMeshPro/SRP", + "m_ConcretePrecision": 0, + "m_PreviewMode": 2, + "m_OutputNode": { + "m_Id": "" + }, + "m_ActiveTargets": [ + { + "m_Id": "7cf0e63037a74dc2a9f591225c678ff4" + } + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "007c75c776ac4f1babe9cd7ae1fc4f14", + "m_Group": { + "m_Id": "daaf032a109749a88c9b8ff8e1f8b541" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -5722.99951171875, + "y": -3827.0, + "width": 134.0, + "height": 34.0 + } + }, + "m_Slots": [ + { + "m_Id": "1356dc7cbdfa4199a6535d3bbf4cd536" + } + ], + "synonyms": [], + "m_Precision": 1, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "3e372195f4bd4845852a37839e5b602d" + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.Rendering.HighDefinition.ShaderGraph.BuiltinData", + "m_ObjectId": "00996039d61e400a9e854ce591ac35a0", + "m_Distortion": false, + "m_DistortionMode": 0, + "m_DistortionDepthTest": true, + "m_AddPrecomputedVelocity": false, + "m_TransparentWritesMotionVec": false, + "m_AlphaToMask": false, + "m_DepthOffset": false, + "m_TransparencyFog": true, + "m_AlphaTestShadow": false, + "m_BackThenFrontRendering": false, + "m_TransparentDepthPrepass": false, + "m_TransparentDepthPostpass": false, + "m_SupportLodCrossFade": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.GroupData", + "m_ObjectId": "013228b0fdf1424097798f0973a9a4fb", + "m_Title": "Face Texture", + "m_Position": { + "x": -4828.0, + "y": -2832.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "02559cbe5ad441a3904ccb75ded2b2c5", + "m_Id": 5, + "m_DisplayName": "Color2", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Color2", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "03182b3263304258b265266325c21f65", + "m_Id": 0, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "045c4f6b050549c7a0efb208e6349779", + "m_Id": 7, + "m_DisplayName": "A", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "04dc152dd2ba4d519391577eb1156235", + "m_Group": { + "m_Id": "013228b0fdf1424097798f0973a9a4fb" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4540.0, + "y": -2749.0, + "width": 151.0, + "height": 34.0 + } + }, + "m_Slots": [ + { + "m_Id": "3d04f5ba6e7b40d281f22eb424145acd" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "c9ec735d1a1046769e5601b2c97c849a" + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "04dfcc9ff13a4bf282ed46faec39d15c", + "m_Id": 4, + "m_DisplayName": "R", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "R", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.Internal.Vector1ShaderProperty", + "m_ObjectId": "05805bc6fcc941fd889922555c6c86d7", + "m_Guid": { + "m_GuidSerialized": "fe84e680-4cee-4ca5-be86-2e293a9ba093" + }, + "m_Name": "Ambient Shadow", + "m_DefaultReferenceName": "Vector1_05805bc6fcc941fd889922555c6c86d7", + "m_OverrideReferenceName": "_Ambient", + "m_GeneratePropertyBlock": true, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": 0.30000001192092898, + "m_FloatType": 1, + "m_RangeValues": { + "x": 0.0, + "y": 1.0 + } +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.Internal.Vector4ShaderProperty", + "m_ObjectId": "0580d4b7e3a049049569f4508643a724", + "m_Guid": { + "m_GuidSerialized": "eefb88c5-7665-45dc-b3c2-7cf98b9990d6" + }, + "m_Name": "Softness", + "m_DefaultReferenceName": "Vector4_D64EC33D", + "m_OverrideReferenceName": "_Softness", + "m_GeneratePropertyBlock": true, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicValueMaterialSlot", + "m_ObjectId": "068ae649e00b40e198ec5a30ad741fab", + "m_Id": 2, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "e00": 0.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 0.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 0.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 0.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "0699eea947fc426cbfeb8744cf120222", + "m_Id": 1, + "m_DisplayName": "Color", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Color", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.Internal.Vector4ShaderProperty", + "m_ObjectId": "07946387933e416db576b677f0711e5f", + "m_Guid": { + "m_GuidSerialized": "21d612fb-8153-41f8-9e2f-9de044c19fbf" + }, + "m_Name": "_FaceTex_ST", + "m_DefaultReferenceName": "Vector4_1A08AD4A", + "m_OverrideReferenceName": "_FaceText_ST", + "m_GeneratePropertyBlock": true, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": { + "x": 1.0, + "y": 1.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicValueMaterialSlot", + "m_ObjectId": "082e9706dffc4c188270980d4e44ce0f", + "m_Id": 0, + "m_DisplayName": "A", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 3, + "m_Value": { + "e00": 0.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 0.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 0.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 0.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "0848ba750e0341198cf0bbd413e0efe4", + "m_Id": 0, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "09b1b86c1c074337a4c439d3a308dd2e", + "m_Id": 7, + "m_DisplayName": "A", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "0a67ca5280214bd794dc0ad66b5710a9", + "m_Id": 4, + "m_DisplayName": "R", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "R", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "0b57f2d35157477ab2b29a5aac14ae8b", + "m_Id": 1, + "m_DisplayName": "B", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 3, + "m_Value": { + "x": 1.0, + "y": 1.0, + "z": 1.0, + "w": 1.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "0ba4932e164847878ddb7b7bcff96985", + "m_Id": 1, + "m_DisplayName": "B", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 3, + "m_Value": { + "x": 1.0, + "y": 1.0, + "z": 1.0, + "w": 1.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "0c4dc51f26484c26ad88a3fe4002abcd", + "m_Id": 2, + "m_DisplayName": "Color (1)", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Color", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicValueMaterialSlot", + "m_ObjectId": "0d6a57754b824f6db9cefa6953bc06a9", + "m_Id": 1, + "m_DisplayName": "B", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 3, + "m_Value": { + "e00": 2.0, + "e01": 2.0, + "e02": 2.0, + "e03": 2.0, + "e10": 2.0, + "e11": 2.0, + "e12": 2.0, + "e13": 2.0, + "e20": 2.0, + "e21": 2.0, + "e22": 2.0, + "e23": 2.0, + "e30": 2.0, + "e31": 2.0, + "e32": 2.0, + "e33": 2.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "0d7878dd226d4cfb81a991dc312309fc", + "m_Id": 0, + "m_DisplayName": "Underlay Dilate", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector2MaterialSlot", + "m_ObjectId": "0f7ffb6d2de4447f9736780cbcee8e07", + "m_Id": 4, + "m_DisplayName": "AnimSpeed", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "AnimSpeed", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0 + }, + "m_Labels": [ + "X", + "Y" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "0fac35636fca4474a6afaefc3c757775", + "m_Id": 1, + "m_DisplayName": "Alpha", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Alpha", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "105b1ed1aa714e41bbe1ef5472bdb11f", + "m_Group": { + "m_Id": "484b51c50485473b819c4f05087b32d7" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4923.99951171875, + "y": -4233.0, + "width": 158.99998474121095, + "height": 34.0 + } + }, + "m_Slots": [ + { + "m_Id": "8a08179f99d649d289b8053d5fa0ad22" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "49e7c3ad55ce458797f0e60c950cb965" + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.MultiplyNode", + "m_ObjectId": "109f638d1f9b49d4991d6d21a86d4eb7", + "m_Group": { + "m_Id": "42cadae0923e4969b50bbc3f78185934" + }, + "m_Name": "Multiply", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -5098.99951171875, + "y": -3182.0, + "width": 130.0, + "height": 118.0 + } + }, + "m_Slots": [ + { + "m_Id": "880bb02c6c6b49b18aa6ebc66dc566a0" + }, + { + "m_Id": "1b9cd8f5f4004e2eaf8afbaab803bc04" + }, + { + "m_Id": "b224a1cf80604103ad085c799995f3c2" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "10a99c07aad742349d258db16838c129", + "m_Id": 1, + "m_DisplayName": "Alpha", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Alpha", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Texture2DInputMaterialSlot", + "m_ObjectId": "1196ae398cc348349ab0c1a23fdab4bd", + "m_Id": 1, + "m_DisplayName": "Texture", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Texture", + "m_StageCapability": 3, + "m_BareResource": false, + "m_Texture": { + "m_SerializedTexture": "{\"texture\":{\"instanceID\":0}}", + "m_Guid": "" + }, + "m_DefaultType": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Texture2DMaterialSlot", + "m_ObjectId": "1356dc7cbdfa4199a6535d3bbf4cd536", + "m_Id": 0, + "m_DisplayName": "_MainTex", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_BareResource": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "14ad19bf20a140dd88d58452d7df688b", + "m_Id": 5, + "m_DisplayName": "Softness", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Softness", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 1.0, + "z": 1.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "150533bad8e2424aaa2c74e253af8592", + "m_Group": { + "m_Id": "42cadae0923e4969b50bbc3f78185934" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4955.0, + "y": -3487.0, + "width": 134.0, + "height": 34.0 + } + }, + "m_Slots": [ + { + "m_Id": "72fb5a0d7796446b9e2b929cb32facdc" + } + ], + "synonyms": [], + "m_Precision": 1, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "3e372195f4bd4845852a37839e5b602d" + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.SplitNode", + "m_ObjectId": "163beb4431c34f538340bc0af0991e6f", + "m_Group": { + "m_Id": "ecf16c34d46f4502ac601f0c38c7576b" + }, + "m_Name": "Split", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -3284.0, + "y": -3516.0, + "width": 119.99999237060547, + "height": 149.0 + } + }, + "m_Slots": [ + { + "m_Id": "4c334de01ecd429baa7652fc6002536b" + }, + { + "m_Id": "e2d28f29bbac4983a401574480b5ca28" + }, + { + "m_Id": "6a7af6143e114a538663e71f56731a21" + }, + { + "m_Id": "3e25be96bb3747738c238cf3a741d5df" + }, + { + "m_Id": "4907352322c644ebacdf2ca30f2994fd" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "19075add867e4757b9520d18fe8de1d0", + "m_Group": { + "m_Id": "42cadae0923e4969b50bbc3f78185934" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4291.99951171875, + "y": -3197.0, + "width": 124.0, + "height": 34.0 + } + }, + "m_Slots": [ + { + "m_Id": "4c28ee9109014fa086e5de7a3993341d" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "0580d4b7e3a049049569f4508643a724" + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicValueMaterialSlot", + "m_ObjectId": "1b9cd8f5f4004e2eaf8afbaab803bc04", + "m_Id": 1, + "m_DisplayName": "B", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 3, + "m_Value": { + "e00": 2.0, + "e01": 2.0, + "e02": 2.0, + "e03": 2.0, + "e10": 2.0, + "e11": 2.0, + "e12": 2.0, + "e13": 2.0, + "e20": 2.0, + "e21": 2.0, + "e22": 2.0, + "e23": 2.0, + "e30": 2.0, + "e31": 2.0, + "e32": 2.0, + "e33": 2.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Texture2DInputMaterialSlot", + "m_ObjectId": "1bdde3efd3b7464b8934c555be0f8a48", + "m_Id": 1, + "m_DisplayName": "Texture", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Texture", + "m_StageCapability": 3, + "m_BareResource": false, + "m_Texture": { + "m_SerializedTexture": "{\"texture\":{\"instanceID\":0}}", + "m_Guid": "" + }, + "m_DefaultType": 0 +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.Internal.Vector1ShaderProperty", + "m_ObjectId": "1be90d4f96a841748b0c95219b12ad27", + "m_Guid": { + "m_GuidSerialized": "4c91c146-43bb-4de8-948a-fbf8b1da10e1" + }, + "m_Name": "Bevel Offset", + "m_DefaultReferenceName": "Vector1_97690701", + "m_OverrideReferenceName": "_BevelOffset", + "m_GeneratePropertyBlock": true, + "m_Precision": 1, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": 0.0, + "m_FloatType": 1, + "m_RangeValues": { + "x": -0.5, + "y": 0.5 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "1c4df61c2fea404eb3b87b270d7c59bc", + "m_Group": { + "m_Id": "42cadae0923e4969b50bbc3f78185934" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4311.0, + "y": -3221.0, + "width": 148.0, + "height": 34.0 + } + }, + "m_Slots": [ + { + "m_Id": "f864c900600e427ba7793f00c715e971" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "867a4ae13c0d4a028c71bc1063824c14" + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicValueMaterialSlot", + "m_ObjectId": "1d35fa1fb5004f96a65ace54fbe4f1ad", + "m_Id": 0, + "m_DisplayName": "A", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 3, + "m_Value": { + "e00": 0.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 0.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 0.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 0.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "1db37082bf844442804487b4944352de", + "m_Id": 4, + "m_DisplayName": "R", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "R", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Texture2DMaterialSlot", + "m_ObjectId": "1df58cfa4dad4c449d01ee1c5ea05f2e", + "m_Id": 0, + "m_DisplayName": "_MainTex", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_BareResource": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.UVNode", + "m_ObjectId": "1e12726617b24675958e942eb62e4b09", + "m_Group": { + "m_Id": "484b51c50485473b819c4f05087b32d7" + }, + "m_Name": "UV", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4772.0, + "y": -4404.0, + "width": 145.00001525878907, + "height": 130.0 + } + }, + "m_Slots": [ + { + "m_Id": "0848ba750e0341198cf0bbd413e0efe4" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_OutputChannel": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Texture2DInputMaterialSlot", + "m_ObjectId": "1f247658c7ba45fb93c41f51e21acb0d", + "m_Id": 1, + "m_DisplayName": "Texture", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Texture", + "m_StageCapability": 3, + "m_BareResource": false, + "m_Texture": { + "m_SerializedTexture": "{\"texture\":{\"instanceID\":0}}", + "m_Guid": "" + }, + "m_DefaultType": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "1f46181633594ae0a1fb2adb76b42981", + "m_Id": 5, + "m_DisplayName": "G", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "G", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "200245fc8bbe4826b209ab5f7ffe074c", + "m_Id": 3, + "m_DisplayName": "A", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.UVMaterialSlot", + "m_ObjectId": "204dacb5a95b424facf11cb6f65bd188", + "m_Id": 2, + "m_DisplayName": "UV", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "UV", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0 + }, + "m_Labels": [ + "X", + "Y" + ], + "m_Channel": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BooleanMaterialSlot", + "m_ObjectId": "215a82c127204988b751de7d3a39b955", + "m_Id": 6, + "m_DisplayName": "Outline", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Outline", + "m_StageCapability": 3, + "m_Value": false, + "m_DefaultValue": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.SamplerStateMaterialSlot", + "m_ObjectId": "215b30ae27784ec3a13360a9029af283", + "m_Id": 3, + "m_DisplayName": "Sampler", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Sampler", + "m_StageCapability": 3, + "m_BareResource": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Internal.BooleanShaderProperty", + "m_ObjectId": "21a7a380e66d42e780e2a2a1baa630d5", + "m_Guid": { + "m_GuidSerialized": "b2d0099f-e605-49f5-9959-e7cacae37aa3" + }, + "m_Name": "Bevel Type", + "m_DefaultReferenceName": "Boolean_21a7a380e66d42e780e2a2a1baa630d5", + "m_OverrideReferenceName": "_BevelType", + "m_GeneratePropertyBlock": true, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": false +} + +{ + "m_SGVersion": 3, + "m_Type": "UnityEditor.ShaderGraph.Internal.ColorShaderProperty", + "m_ObjectId": "22b7f3c2bb7b48c0a7fdeb50e33e7d5e", + "m_Guid": { + "m_GuidSerialized": "cd167d3a-7465-4d5a-86fc-0f22dc0ef908" + }, + "m_Name": "Outline Color 1", + "m_DefaultReferenceName": "Color_5550EB71", + "m_OverrideReferenceName": "_OutlineColor1", + "m_GeneratePropertyBlock": true, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": { + "r": 0.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "m_ColorMode": 1 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "232b1aa09e67479abae141d3c76d3c5b", + "m_Id": 0, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "256d41e89a204d22951450de1c38051d", + "m_Id": 0, + "m_DisplayName": "RGBA", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "RGBA", + "m_StageCapability": 2, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector3MaterialSlot", + "m_ObjectId": "26e48352a08441bfa694dcea54c06e36", + "m_Id": 5, + "m_DisplayName": "RGB", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "RGB", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [ + "X", + "Y", + "Z" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BlockNode", + "m_ObjectId": "2786e48f93f54a82aee4303ce7b63c82", + "m_Group": { + "m_Id": "" + }, + "m_Name": "SurfaceDescription.Smoothness", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": 0.0, + "y": 0.0, + "width": 0.0, + "height": 0.0 + } + }, + "m_Slots": [ + { + "m_Id": "9d0c47172bf840a0ac029980ba082af7" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SerializedDescriptor": "SurfaceDescription.Smoothness" +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "281bcee4777040f8a31ee0e10344e98d", + "m_Id": 0, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 1.0, + "y": 1.0, + "z": 1.0, + "w": 1.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "285f6a9863d54ed2a8150727ad749456", + "m_Group": { + "m_Id": "98934a69591249d5b8b92b39045359a3" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4177.0, + "y": -2422.0, + "width": 154.0, + "height": 34.0 + } + }, + "m_Slots": [ + { + "m_Id": "b42e6dbfbc864097af182cbff5c0c1fb" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "22b7f3c2bb7b48c0a7fdeb50e33e7d5e" + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.IsFrontFaceNode", + "m_ObjectId": "2a552a0b828f457c911aa19561e410ae", + "m_Group": { + "m_Id": "d258902c6ec74942afdb9ebf8c1d07f8" + }, + "m_Name": "Is Front Face", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4282.0, + "y": -3681.3330078125, + "width": 121.99999237060547, + "height": 77.33348846435547 + } + }, + "m_Slots": [ + { + "m_Id": "2ef1d888dc9d49e59d6a6950897ddc93" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.CustomFunctionNode", + "m_ObjectId": "2ac79705aa9e415dbb74ec215233fd1b", + "m_Group": { + "m_Id": "" + }, + "m_Name": "Composite (Custom Function)", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -3350.0, + "y": -3810.0, + "width": 213.0, + "height": 118.0 + } + }, + "m_Slots": [ + { + "m_Id": "a75f7ac601c446469802fe7754c1f279" + }, + { + "m_Id": "8c38a5d8327f456e9783740c05382619" + }, + { + "m_Id": "facc84930f544fd7a0205a6176b18ac0" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SourceType": 0, + "m_FunctionName": "Composite", + "m_FunctionSource": "96de908384869cd409c75efa351d5edf", + "m_FunctionBody": "Enter function body here..." +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "2b01ea3023e34c94af1754e4dcea8f2e", + "m_Id": 0, + "m_DisplayName": "Face Color", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BooleanMaterialSlot", + "m_ObjectId": "2bf5f2fdd2984599b7323d10cfb1d240", + "m_Id": 1, + "m_DisplayName": "Filter", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Filter", + "m_StageCapability": 3, + "m_Value": false, + "m_DefaultValue": false +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.Internal.Vector1ShaderProperty", + "m_ObjectId": "2c10b97b92c947ceb307a93759c0228b", + "m_Guid": { + "m_GuidSerialized": "6be0b8ff-a766-4c6b-a6e4-3a72758ac95f" + }, + "m_Name": "Bevel Amount", + "m_DefaultReferenceName": "Vector1_B01DD93E", + "m_OverrideReferenceName": "_BevelAmount", + "m_GeneratePropertyBlock": true, + "m_Precision": 1, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": 0.25, + "m_FloatType": 1, + "m_RangeValues": { + "x": 0.0, + "y": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "2c7a9460724b47daad8df1be144de7c6", + "m_Id": 3, + "m_DisplayName": "Transform", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Transform", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.Internal.Vector2ShaderProperty", + "m_ObjectId": "2d0a269511e34bd1ba9056d2c939dff2", + "m_Guid": { + "m_GuidSerialized": "edbe73dc-53ab-4bc1-9d64-ab36e0e05f03" + }, + "m_Name": "_FaceUVSpeed", + "m_DefaultReferenceName": "Vector2_3A8E0F13", + "m_OverrideReferenceName": "_FaceUVSpeed", + "m_GeneratePropertyBlock": true, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "2db15d90c2204143b225ec4ef08d0755", + "m_Group": { + "m_Id": "98934a69591249d5b8b92b39045359a3" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4387.0, + "y": -2405.0, + "width": 163.0, + "height": 34.0 + } + }, + "m_Slots": [ + { + "m_Id": "def8e0b9d8384982bc5b4c32d877e458" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "46fbf3eeb0ea4470869cba7443249295" + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicValueMaterialSlot", + "m_ObjectId": "2e4eb1ef08bb44178c82e53872485e0f", + "m_Id": 0, + "m_DisplayName": "A", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 3, + "m_Value": { + "e00": 0.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 0.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 0.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 0.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BooleanMaterialSlot", + "m_ObjectId": "2ef1d888dc9d49e59d6a6950897ddc93", + "m_Id": 0, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 2, + "m_Value": true, + "m_DefaultValue": true +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.Rendering.HighDefinition.ShaderGraph.SystemData", + "m_ObjectId": "305e3be306674fcd8bb02273d27ee5b7", + "m_MaterialNeedsUpdateHash": 280370, + "m_SurfaceType": 1, + "m_RenderingPass": 4, + "m_BlendMode": 0, + "m_ZTest": 4, + "m_ZWrite": false, + "m_TransparentCullMode": 2, + "m_OpaqueCullMode": 2, + "m_SortPriority": 0, + "m_AlphaTest": true, + "m_TransparentDepthPrepass": false, + "m_TransparentDepthPostpass": false, + "m_SupportLodCrossFade": false, + "m_DoubleSidedMode": 0, + "m_DOTSInstancing": false, + "m_Version": 0, + "m_FirstTimeMigrationExecuted": true, + "inspectorFoldoutMask": 9 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "30ca940fe2794c949f2a1d4d2caaa446", + "m_Id": 2, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.SampleTexture2DNode", + "m_ObjectId": "319916a5921343f7b7eef0e50dc93def", + "m_Group": { + "m_Id": "42cadae0923e4969b50bbc3f78185934" + }, + "m_Name": "Sample Texture 2D", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4791.0, + "y": -3245.0, + "width": 183.99998474121095, + "height": 253.0 + } + }, + "m_Slots": [ + { + "m_Id": "d219977210094c0082c517d8dc00c8bb" + }, + { + "m_Id": "f48f04ad45d046a8b88e71731ed506e7" + }, + { + "m_Id": "e6e80c6b0db545cda26b079a9a78fbb3" + }, + { + "m_Id": "c6bdb985bc16435fa72f5a3c81bb633c" + }, + { + "m_Id": "d1a17e42e7a04dc38984e3c01149445b" + }, + { + "m_Id": "fb15d0ba56d54a6192f11e107aeb5fa8" + }, + { + "m_Id": "c35312edaa2344788b1964ee2f63a236" + }, + { + "m_Id": "c88fcbaeea954a5f9c68c339fa8b604d" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_TextureType": 0, + "m_NormalMapSpace": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "34a67e0fef884f9399e674d9eeaf720c", + "m_Id": 6, + "m_DisplayName": "Color3", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Color3", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "34a72a5ebb04402384a4fd3748111a37", + "m_Id": 0, + "m_DisplayName": "Alpha Clip Threshold", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "AlphaClipThreshold", + "m_StageCapability": 2, + "m_Value": 0.0010000000474974514, + "m_DefaultValue": 0.5, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Texture2DMaterialSlot", + "m_ObjectId": "3535ae87c6dd4769b52b20d9eca61069", + "m_Id": 0, + "m_DisplayName": "_MainTex", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_BareResource": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.SamplerStateMaterialSlot", + "m_ObjectId": "35cbea6373dd4e4f8d0fea36e8add392", + "m_Id": 3, + "m_DisplayName": "Sampler", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Sampler", + "m_StageCapability": 3, + "m_BareResource": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicValueMaterialSlot", + "m_ObjectId": "36a0c473c4c04c3a930dd38f3920d410", + "m_Id": 1, + "m_DisplayName": "B", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 3, + "m_Value": { + "e00": 2.0, + "e01": 2.0, + "e02": 2.0, + "e03": 2.0, + "e10": 2.0, + "e11": 2.0, + "e12": 2.0, + "e13": 2.0, + "e20": 2.0, + "e21": 2.0, + "e22": 2.0, + "e23": 2.0, + "e30": 2.0, + "e31": 2.0, + "e32": 2.0, + "e33": 2.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.UVNode", + "m_ObjectId": "36f1b4d96f2941c39e5cd95d9c1d2ce6", + "m_Group": { + "m_Id": "d0a791a544614667962a9a9a9ce0c68a" + }, + "m_Name": "UV", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -6008.99951171875, + "y": -3341.0, + "width": 144.99998474121095, + "height": 130.0 + } + }, + "m_Slots": [ + { + "m_Id": "65b3dc13b2b6484283ffe5abfe87a06a" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_OutputChannel": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicValueMaterialSlot", + "m_ObjectId": "373f1de8db6c429c9d46c781f741d7a4", + "m_Id": 1, + "m_DisplayName": "B", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 3, + "m_Value": { + "e00": 2.0, + "e01": 2.0, + "e02": 2.0, + "e03": 2.0, + "e10": 2.0, + "e11": 2.0, + "e12": 2.0, + "e13": 2.0, + "e20": 2.0, + "e21": 2.0, + "e22": 2.0, + "e23": 2.0, + "e30": 2.0, + "e31": 2.0, + "e32": 2.0, + "e33": 2.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "3802c81c3be24823aa1d7c9997a33c29", + "m_Id": 2, + "m_DisplayName": "RGBA", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "RGBA", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Texture2DInputMaterialSlot", + "m_ObjectId": "3915c1927ffe49f8967304321cfbe497", + "m_Id": 4, + "m_DisplayName": "Atlas", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Atlas", + "m_StageCapability": 3, + "m_BareResource": true, + "m_Texture": { + "m_SerializedTexture": "{\"texture\":{\"instanceID\":0}}", + "m_Guid": "" + }, + "m_DefaultType": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "39a382d661e2484da71f04c43f48e55f", + "m_Id": 3, + "m_DisplayName": "A", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.VertexColorNode", + "m_ObjectId": "39f2f84f30304d859fb07569e2695f60", + "m_Group": { + "m_Id": "ecf16c34d46f4502ac601f0c38c7576b" + }, + "m_Name": "Vertex Color", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -3423.000244140625, + "y": -3516.0, + "width": 116.0, + "height": 94.0 + } + }, + "m_Slots": [ + { + "m_Id": "4b2d9ea03bf64fa19dcae1511d2581da" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 2, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BlockNode", + "m_ObjectId": "3c50439118b2496f9e390021b0964606", + "m_Group": { + "m_Id": "" + }, + "m_Name": "SurfaceDescription.AlphaClipThreshold", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -3028.0, + "y": -3054.0, + "width": 200.0, + "height": 40.66650390625 + } + }, + "m_Slots": [ + { + "m_Id": "34a72a5ebb04402384a4fd3748111a37" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SerializedDescriptor": "SurfaceDescription.AlphaClipThreshold" +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Texture2DMaterialSlot", + "m_ObjectId": "3d04f5ba6e7b40d281f22eb424145acd", + "m_Id": 0, + "m_DisplayName": "Face Texture", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_BareResource": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "3db1608e927e4102a3c3a88e9fcab39a", + "m_Id": 3, + "m_DisplayName": "Transform", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Transform", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "3dccd64e7f324bc1a75c1479d7a67c51", + "m_Id": 0, + "m_DisplayName": "In", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "In", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.CombineNode", + "m_ObjectId": "3e231021af7b47ba97f2871e7f25d0fe", + "m_Group": { + "m_Id": "ecf16c34d46f4502ac601f0c38c7576b" + }, + "m_Name": "Combine", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -2803.000244140625, + "y": -3520.0, + "width": 140.0, + "height": 166.0 + } + }, + "m_Slots": [ + { + "m_Id": "6ccaced3889e4503a9414d808ec33981" + }, + { + "m_Id": "7f3d71a6c96847c099da45f95aafbecb" + }, + { + "m_Id": "d8edec16956c4f15b7d51d6ec10753f4" + }, + { + "m_Id": "39a382d661e2484da71f04c43f48e55f" + }, + { + "m_Id": "8764669016f6442f8152593c18a649d7" + }, + { + "m_Id": "26e48352a08441bfa694dcea54c06e36" + }, + { + "m_Id": "3e94a0d106064bdb864c960512ef4026" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "3e25be96bb3747738c238cf3a741d5df", + "m_Id": 3, + "m_DisplayName": "B", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Internal.Texture2DShaderProperty", + "m_ObjectId": "3e372195f4bd4845852a37839e5b602d", + "m_Guid": { + "m_GuidSerialized": "60abd046-2a1a-48cd-a0af-2f702f7f53ab" + }, + "m_Name": "_MainTex", + "m_DefaultReferenceName": "Texture2D_90CBF488", + "m_OverrideReferenceName": "_MainTex", + "m_GeneratePropertyBlock": true, + "m_Precision": 1, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": { + "m_SerializedTexture": "{\"texture\":{\"fileID\":28684132378477856,\"guid\":\"8f586378b4e144a9851e7b34d9b748ee\",\"type\":2}}", + "m_Guid": "" + }, + "m_Modifiable": true, + "m_DefaultType": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector2MaterialSlot", + "m_ObjectId": "3e94a0d106064bdb864c960512ef4026", + "m_Id": 6, + "m_DisplayName": "RG", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "RG", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0 + }, + "m_Labels": [ + "X", + "Y" + ] +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.Internal.Vector1ShaderProperty", + "m_ObjectId": "3ec4797e381747829ef4712c85fcf7a1", + "m_Guid": { + "m_GuidSerialized": "020d65cc-50a8-4b8a-a624-90d7b489f549" + }, + "m_Name": "Specular Power", + "m_DefaultReferenceName": "Vector1_3ec4797e381747829ef4712c85fcf7a1", + "m_OverrideReferenceName": "_SpecularPower", + "m_GeneratePropertyBlock": true, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": 1.0, + "m_FloatType": 1, + "m_RangeValues": { + "x": 0.0, + "y": 4.0 + } +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.Internal.Vector2ShaderProperty", + "m_ObjectId": "3fdf4b7bc5d4426492dcc057603ef4a6", + "m_Guid": { + "m_GuidSerialized": "675d2567-3fca-4da6-9462-dfa4924950f1" + }, + "m_Name": "_OutlineUVSpeed", + "m_DefaultReferenceName": "Vector2_D66D89E6", + "m_OverrideReferenceName": "_OutlineUVSpeed", + "m_GeneratePropertyBlock": true, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicValueMaterialSlot", + "m_ObjectId": "400d0b6c95dd4540ad3da3e8cb7e50b2", + "m_Id": 2, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "e00": 0.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 0.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 0.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 0.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicValueMaterialSlot", + "m_ObjectId": "41986ac6400d46709d0ef043a67f6b34", + "m_Id": 2, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "e00": 0.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 0.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 0.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 0.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "41b9b79b3859472882bcea393703eec0", + "m_Id": 0, + "m_DisplayName": "RGBA", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "RGBA", + "m_StageCapability": 2, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.Internal.Vector1ShaderProperty", + "m_ObjectId": "424dbeeb009344efa29c304c4979e3d6", + "m_Guid": { + "m_GuidSerialized": "314c37de-c6f2-4463-866d-8588f6fc119e" + }, + "m_Name": "Diffuse Shadow", + "m_DefaultReferenceName": "Vector1_424dbeeb009344efa29c304c4979e3d6", + "m_OverrideReferenceName": "_Diffuse", + "m_GeneratePropertyBlock": true, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": 0.30000001192092898, + "m_FloatType": 1, + "m_RangeValues": { + "x": 0.0, + "y": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "42a586e4f6ec40eeaba891b7fd133864", + "m_Group": { + "m_Id": "484b51c50485473b819c4f05087b32d7" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4934.0, + "y": -4442.99951171875, + "width": 133.99998474121095, + "height": 33.999996185302737 + } + }, + "m_Slots": [ + { + "m_Id": "da7a06d393a44089842070d51d2aa0a6" + } + ], + "synonyms": [], + "m_Precision": 1, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "3e372195f4bd4845852a37839e5b602d" + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.GroupData", + "m_ObjectId": "42cadae0923e4969b50bbc3f78185934", + "m_Title": "Face + 3 Outlines + Underlay", + "m_Position": { + "x": -5468.0, + "y": -3558.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "4328cdbf78b94c038fd614c59bfe1cac", + "m_Id": 0, + "m_DisplayName": "RGBA", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "RGBA", + "m_StageCapability": 2, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.CustomFunctionNode", + "m_ObjectId": "44317f2e371447e2a8d894f8a021a235", + "m_Group": { + "m_Id": "484b51c50485473b819c4f05087b32d7" + }, + "m_Name": "Layer1 (Custom Function)", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4004.999755859375, + "y": -4173.0, + "width": 191.0, + "height": 118.0 + } + }, + "m_Slots": [ + { + "m_Id": "10a99c07aad742349d258db16838c129" + }, + { + "m_Id": "b85d677872b44421bf5536f42ba0267c" + }, + { + "m_Id": "75aba700d74d4b2687bf3166cf1da3e2" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SourceType": 0, + "m_FunctionName": "Layer1", + "m_FunctionSource": "96de908384869cd409c75efa351d5edf", + "m_FunctionBody": "Enter function body here..." +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "44806230fa384c1e95f9c5918a14f056", + "m_Id": 7, + "m_DisplayName": "A", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "4488af8ff6a7421298a7e827f567263b", + "m_Group": { + "m_Id": "484b51c50485473b819c4f05087b32d7" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4226.0, + "y": -4109.0, + "width": 158.0, + "height": 34.0 + } + }, + "m_Slots": [ + { + "m_Id": "66f69ef16eac4eb48357bde804cf3c39" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "8cf8aae64c1d443f9303126886b40f17" + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.ColorRGBMaterialSlot", + "m_ObjectId": "4590bfa2a0664b65b6f073bae33a071f", + "m_Id": 0, + "m_DisplayName": "Emission", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Emission", + "m_StageCapability": 2, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [], + "m_ColorMode": 1, + "m_DefaultColor": { + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.UVNode", + "m_ObjectId": "4648b46ad29a4008a80de4f8a5a5b813", + "m_Group": { + "m_Id": "98934a69591249d5b8b92b39045359a3" + }, + "m_Name": "UV", + "m_DrawState": { + "m_Expanded": false, + "m_Position": { + "serializedVersion": "2", + "x": -4615.0, + "y": -2422.0, + "width": 145.0, + "height": 130.0 + } + }, + "m_Slots": [ + { + "m_Id": "b2baf44eae52473cb6cda7b1debece01" + } + ], + "synonyms": [], + "m_Precision": 1, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_OutputChannel": 1 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Internal.Texture2DShaderProperty", + "m_ObjectId": "46fbf3eeb0ea4470869cba7443249295", + "m_Guid": { + "m_GuidSerialized": "be87c5a3-e361-4b95-89c8-911c39a51c0d" + }, + "m_Name": "Outline Texture", + "m_DefaultReferenceName": "Texture2D_A0B54237", + "m_OverrideReferenceName": "_OutlineTex", + "m_GeneratePropertyBlock": true, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": { + "m_SerializedTexture": "{\"texture\":{\"instanceID\":0}}", + "m_Guid": "" + }, + "m_Modifiable": true, + "m_DefaultType": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "47d020251e9841a5b1f0fd64396026a1", + "m_Id": 1, + "m_DisplayName": "B", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 3, + "m_Value": { + "x": 1.0, + "y": 1.0, + "z": 1.0, + "w": 1.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BlockNode", + "m_ObjectId": "48390d02257d41bf98eace1deaa4c539", + "m_Group": { + "m_Id": "" + }, + "m_Name": "VertexDescription.Position", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": 0.0, + "y": 0.0, + "width": 0.0, + "height": 0.0 + } + }, + "m_Slots": [ + { + "m_Id": "8036d0e6090b456e9b4ea87227868236" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SerializedDescriptor": "VertexDescription.Position" +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.GroupData", + "m_ObjectId": "484b51c50485473b819c4f05087b32d7", + "m_Title": "Underlay", + "m_Position": { + "x": -5253.0, + "y": -4542.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "4907352322c644ebacdf2ca30f2994fd", + "m_Id": 4, + "m_DisplayName": "A", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.Internal.Vector2ShaderProperty", + "m_ObjectId": "49e7c3ad55ce458797f0e60c950cb965", + "m_Guid": { + "m_GuidSerialized": "31b55db9-0da1-4ec4-af2b-d83747ed5bc4" + }, + "m_Name": "Underlay Offset", + "m_DefaultReferenceName": "Vector2_CE9DEDB3", + "m_OverrideReferenceName": "_UnderlayOffset", + "m_GeneratePropertyBlock": true, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "4a66dcbe712a4d40bd8f355b834594b5", + "m_Id": 6, + "m_DisplayName": "B", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.CombineNode", + "m_ObjectId": "4abff6ff92fa4a05b203f10580988335", + "m_Group": { + "m_Id": "42cadae0923e4969b50bbc3f78185934" + }, + "m_Name": "Combine", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4323.99951171875, + "y": -3498.0, + "width": 140.0, + "height": 166.0 + } + }, + "m_Slots": [ + { + "m_Id": "b015d1b7e4134c59baf6851e7649802c" + }, + { + "m_Id": "d9dc4839ee2847999110bdb234d6041a" + }, + { + "m_Id": "91d6a9a5fbc04ea49075cb51835e7264" + }, + { + "m_Id": "f42ad06b3c6a45d3ab33de904c063412" + }, + { + "m_Id": "ed6c215a65584deeaefad1d2c7743044" + }, + { + "m_Id": "edbee7a8952b46529ac5ad0365775774" + }, + { + "m_Id": "70337a74f6ad4b7bb6befc825219bab1" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "4b2d9ea03bf64fa19dcae1511d2581da", + "m_Id": 0, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 1.0, + "y": 1.0, + "z": 1.0, + "w": 1.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "4bda5c294e1949138d033640e1d385b4", + "m_Id": 1, + "m_DisplayName": "B", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 3, + "m_Value": { + "x": 1.0, + "y": 1.0, + "z": 1.0, + "w": 1.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "4c28ee9109014fa086e5de7a3993341d", + "m_Id": 0, + "m_DisplayName": "Softness", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "4c334de01ecd429baa7652fc6002536b", + "m_Id": 0, + "m_DisplayName": "In", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "In", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "4d1cb1a475df49f9a148195a65f5453a", + "m_Id": 0, + "m_DisplayName": "A", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 3, + "m_Value": { + "x": 1.0, + "y": 1.0, + "z": 1.0, + "w": 1.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "4d9ce48719d143748f9f8e22da6f9ddc", + "m_Id": 5, + "m_DisplayName": "TextureWidth", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "TextureWidth", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "4e64dac49ddc47c3b5b1e27b17a08304", + "m_Id": 2, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Texture2DInputMaterialSlot", + "m_ObjectId": "4eb3c00a1ca44e10be833b7ca61ff059", + "m_Id": 1, + "m_DisplayName": "Texture", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Texture", + "m_StageCapability": 3, + "m_BareResource": false, + "m_Texture": { + "m_SerializedTexture": "{\"texture\":{\"fileID\":-2362172177983852347,\"guid\":\"dda5bcb0d1e9515498f6e4e038bbefe6\",\"type\":2}}", + "m_Guid": "" + }, + "m_DefaultType": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "4f194ff591484e908fc2bcdacbcf2570", + "m_Group": { + "m_Id": "013228b0fdf1424097798f0973a9a4fb" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4309.0, + "y": -2773.0, + "width": 134.0, + "height": 34.0 + } + }, + "m_Slots": [ + { + "m_Id": "2b01ea3023e34c94af1754e4dcea8f2e" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "dc75c4e3a1bc4bb0a128086c2b0679a5" + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Texture2DInputMaterialSlot", + "m_ObjectId": "509e6f38505b4b0695b263706a55028f", + "m_Id": 1, + "m_DisplayName": "Texture", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Texture", + "m_StageCapability": 3, + "m_BareResource": false, + "m_Texture": { + "m_SerializedTexture": "{\"texture\":{\"fileID\":-2362172177983852347,\"guid\":\"dda5bcb0d1e9515498f6e4e038bbefe6\",\"type\":2}}", + "m_Guid": "" + }, + "m_DefaultType": 0 +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.CustomFunctionNode", + "m_ObjectId": "51378bae98a94c309785d14cd5cbb453", + "m_Group": { + "m_Id": "d258902c6ec74942afdb9ebf8c1d07f8" + }, + "m_Name": "GetSurfaceNormal (Custom Function)", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4067.333251953125, + "y": -3881.99951171875, + "width": 263.9999694824219, + "height": 189.99998474121095 + } + }, + "m_Slots": [ + { + "m_Id": "5b0077c23eae443887872f84227deccc" + }, + { + "m_Id": "3915c1927ffe49f8967304321cfbe497" + }, + { + "m_Id": "4d9ce48719d143748f9f8e22da6f9ddc" + }, + { + "m_Id": "ebd6d75abcb84108bcadbfe7ee5f6244" + }, + { + "m_Id": "ef9738ec7e894772a14e9dce441c16c6" + }, + { + "m_Id": "9eeec1a9713045af8845cea263d5ea48" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SourceType": 0, + "m_FunctionName": "GetSurfaceNormal", + "m_FunctionSource": "96de908384869cd409c75efa351d5edf", + "m_FunctionBody": "Enter function body here..." +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.SamplerStateMaterialSlot", + "m_ObjectId": "51f76f8a53ad43a4ad028426548ce9ba", + "m_Id": 3, + "m_DisplayName": "Sampler", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Sampler", + "m_StageCapability": 3, + "m_BareResource": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "52798bdb86f6400e86489a7a368e9f8b", + "m_Group": { + "m_Id": "d0a791a544614667962a9a9a9ce0c68a" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -6154.99951171875, + "y": -3169.0, + "width": 134.0, + "height": 34.0 + } + }, + "m_Slots": [ + { + "m_Id": "1df58cfa4dad4c449d01ee1c5ea05f2e" + } + ], + "synonyms": [], + "m_Precision": 1, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "3e372195f4bd4845852a37839e5b602d" + } +} + +{ + "m_SGVersion": 3, + "m_Type": "UnityEditor.ShaderGraph.Internal.ColorShaderProperty", + "m_ObjectId": "53073e5ea924459fa6681a4943e9f947", + "m_Guid": { + "m_GuidSerialized": "5fdac24e-2d58-4471-80ce-79c3ab9a2564" + }, + "m_Name": "Outline Color 2", + "m_DefaultReferenceName": "Color_DBAB5AEC", + "m_OverrideReferenceName": "_OutlineColor2", + "m_GeneratePropertyBlock": true, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": { + "r": 0.009433984756469727, + "g": 0.02534518577158451, + "b": 1.0, + "a": 1.0 + }, + "m_ColorMode": 1 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "54d7a93ffec5490aa4591da23a21b693", + "m_Id": 1, + "m_DisplayName": "G", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "G", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector2MaterialSlot", + "m_ObjectId": "55ffa45ec3654d5e88089fb40d2b0465", + "m_Id": 4, + "m_DisplayName": "AnimSpeed", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "AnimSpeed", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0 + }, + "m_Labels": [ + "X", + "Y" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.MultiplyNode", + "m_ObjectId": "56c25395796e4d2fbe5c892d428d1620", + "m_Group": { + "m_Id": "42cadae0923e4969b50bbc3f78185934" + }, + "m_Name": "Multiply", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -5102.99951171875, + "y": -3427.0, + "width": 130.0, + "height": 118.0 + } + }, + "m_Slots": [ + { + "m_Id": "9eb8137a6c2e41bbafdc8b0732dd47a3" + }, + { + "m_Id": "36a0c473c4c04c3a930dd38f3920d410" + }, + { + "m_Id": "068ae649e00b40e198ec5a30ad741fab" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.UVMaterialSlot", + "m_ObjectId": "57abc172afd449e2a4d567f93432507b", + "m_Id": 2, + "m_DisplayName": "UV", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "UV", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0 + }, + "m_Labels": [ + "X", + "Y" + ], + "m_Channel": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "582d6e289dbe4fdca7cf0307273eaa2f", + "m_Id": 0, + "m_DisplayName": "RGBA", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "RGBA", + "m_StageCapability": 2, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.MultiplyNode", + "m_ObjectId": "59bd90a849624124bae6464ee3669aa6", + "m_Group": { + "m_Id": "98934a69591249d5b8b92b39045359a3" + }, + "m_Name": "Multiply", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4007.0, + "y": -2395.0, + "width": 130.0, + "height": 117.99999237060547 + } + }, + "m_Slots": [ + { + "m_Id": "2e4eb1ef08bb44178c82e53872485e0f" + }, + { + "m_Id": "8695190a5e614f2d90081871a8a06fc2" + }, + { + "m_Id": "81bdb47901ef48e5a588c6724b1b0142" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector3MaterialSlot", + "m_ObjectId": "5b0077c23eae443887872f84227deccc", + "m_Id": 0, + "m_DisplayName": "Normal", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Normal", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [ + "X", + "Y", + "Z" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "5b3ff4ee364f4d7a923b530ad60d8762", + "m_Id": 0, + "m_DisplayName": "Width", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Width", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.Internal.Vector1ShaderProperty", + "m_ObjectId": "5bd258837c514ff7ab0bf7027e762c18", + "m_Guid": { + "m_GuidSerialized": "2d8f3ee9-1307-4b58-a60d-526e86b07109" + }, + "m_Name": "Bevel Roundness", + "m_DefaultReferenceName": "Vector1_AB6A015F", + "m_OverrideReferenceName": "_BevelRoundness", + "m_GeneratePropertyBlock": true, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": 0.0, + "m_FloatType": 1, + "m_RangeValues": { + "x": 0.0, + "y": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "5da82bf481f8489ebd05e997f617f51b", + "m_Id": 4, + "m_DisplayName": "Isoperimeter", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Isoperimeter", + "m_StageCapability": 3, + "m_Value": 4.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "5e42524569844befad16fda5a94eb9cb", + "m_Id": 0, + "m_DisplayName": "R", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "R", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.Internal.Vector1ShaderProperty", + "m_ObjectId": "5fbe253f3e444f2aa8ac717f9c856619", + "m_Guid": { + "m_GuidSerialized": "0a61c93f-6430-4aa6-af07-79bc3b411ccd" + }, + "m_Name": "Bevel Width", + "m_DefaultReferenceName": "Vector1_B50BBFCC", + "m_OverrideReferenceName": "_BevelWidth", + "m_GeneratePropertyBlock": true, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": 0.5, + "m_FloatType": 1, + "m_RangeValues": { + "x": 0.0, + "y": 0.5 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "61133d79a89048c195f54939b2a1d30a", + "m_Id": 2, + "m_DisplayName": "Alpha", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Alpha", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "61a6ac5f29344d109411f26850ab0a96", + "m_Id": 6, + "m_DisplayName": "B", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.Rendering.HighDefinition.ShaderGraph.HDLitData", + "m_ObjectId": "6238ae56182d404f8563cb88cb801549", + "m_RayTracing": false, + "m_MaterialType": 0, + "m_RefractionModel": 0, + "m_SSSTransmission": true, + "m_EnergyConservingSpecular": true, + "m_ClearCoat": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "6271438664e74b3fbf723bd6a1f50f8b", + "m_Id": 6, + "m_DisplayName": "B", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "62bc551cea604e88b7858cc37d96a98a", + "m_Id": 2, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.Internal.Vector2ShaderProperty", + "m_ObjectId": "636180f6e0504f2baaa5cc086980cb47", + "m_Guid": { + "m_GuidSerialized": "c1223e37-093d-4d5a-b2b0-cd9cc3e4f88e" + }, + "m_Name": "Outline Offset 1", + "m_DefaultReferenceName": "Vector2_636180f6e0504f2baaa5cc086980cb47", + "m_OverrideReferenceName": "_OutlineOffset1", + "m_GeneratePropertyBlock": true, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "63c7cd57fc3c45a9a97b514fdae32693", + "m_Group": { + "m_Id": "42cadae0923e4969b50bbc3f78185934" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -5266.99951171875, + "y": -3387.0, + "width": 156.99998474121095, + "height": 34.0 + } + }, + "m_Slots": [ + { + "m_Id": "c422a9a9ff824176aad2241f58c44d0b" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "636180f6e0504f2baaa5cc086980cb47" + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "641eda269d7b4da9acb65f8d50035ea9", + "m_Id": 0, + "m_DisplayName": "SSR", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "SSR", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "65b3dc13b2b6484283ffe5abfe87a06a", + "m_Id": 0, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.SampleTexture2DNode", + "m_ObjectId": "65c8e64a7535466e933eed08a2f77532", + "m_Group": { + "m_Id": "42cadae0923e4969b50bbc3f78185934" + }, + "m_Name": "Sample Texture 2D", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4791.0, + "y": -3499.0, + "width": 183.99998474121095, + "height": 253.0 + } + }, + "m_Slots": [ + { + "m_Id": "256d41e89a204d22951450de1c38051d" + }, + { + "m_Id": "0a67ca5280214bd794dc0ad66b5710a9" + }, + { + "m_Id": "ebbd94a7102a4457a48ac492de3bff14" + }, + { + "m_Id": "6271438664e74b3fbf723bd6a1f50f8b" + }, + { + "m_Id": "c9b722d107ce4cd6a748c883472b9b0f" + }, + { + "m_Id": "74cf69e61bef44589521f1bf2bf3c59a" + }, + { + "m_Id": "6e532f83d1c44e839bcfc5845d3b01d6" + }, + { + "m_Id": "cb5e9f9567e84f8fa5463efc0e256e19" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_TextureType": 0, + "m_NormalMapSpace": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "66f69ef16eac4eb48357bde804cf3c39", + "m_Id": 0, + "m_DisplayName": "_UnderlayColor", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "67a519f507384ff1861df5d8d5b486be", + "m_Group": { + "m_Id": "d258902c6ec74942afdb9ebf8c1d07f8" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4278.0, + "y": -3939.99951171875, + "width": 135.3330078125, + "height": 33.999996185302737 + } + }, + "m_Slots": [ + { + "m_Id": "c3e6d7c20c184bf39fd8822130e693e7" + } + ], + "synonyms": [], + "m_Precision": 1, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "3e372195f4bd4845852a37839e5b602d" + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.Rendering.HighDefinition.ShaderGraph.HDLitSubTarget", + "m_ObjectId": "67bc2306558f4f2fa807637aaebaeab4" +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "68ec7c31365549d6a8ce883edfc02de2", + "m_Id": 4, + "m_DisplayName": "Color1", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Color1", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "6a7af6143e114a538663e71f56731a21", + "m_Id": 2, + "m_DisplayName": "G", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "G", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.MultiplyNode", + "m_ObjectId": "6b2f65c1463f4f7bad16c54a95d2fe75", + "m_Group": { + "m_Id": "42cadae0923e4969b50bbc3f78185934" + }, + "m_Name": "Multiply", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -5101.0, + "y": -3301.0, + "width": 130.0, + "height": 118.0 + } + }, + "m_Slots": [ + { + "m_Id": "1d35fa1fb5004f96a65ace54fbe4f1ad" + }, + { + "m_Id": "fa6de3be9f5b4411b5081b49e645f424" + }, + { + "m_Id": "400d0b6c95dd4540ad3da3e8cb7e50b2" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "6ccaced3889e4503a9414d808ec33981", + "m_Id": 0, + "m_DisplayName": "R", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "R", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "6dfc1177dd0541a7a780fbf911ad1956", + "m_Id": 0, + "m_DisplayName": "_OutlineTexture_ST", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "6e13f3cd573c467a94379f45d96cb690", + "m_Id": 2, + "m_DisplayName": "SSR", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "SSR", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.UVMaterialSlot", + "m_ObjectId": "6e532f83d1c44e839bcfc5845d3b01d6", + "m_Id": 2, + "m_DisplayName": "UV", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "UV", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0 + }, + "m_Labels": [], + "m_Channel": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BlockNode", + "m_ObjectId": "6e8946a245e842b38231d4a241bfb3ef", + "m_Group": { + "m_Id": "" + }, + "m_Name": "SurfaceDescription.BaseColor", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -3026.0, + "y": -3110.0, + "width": 200.0, + "height": 40.66650390625 + } + }, + "m_Slots": [ + { + "m_Id": "ef0b93f78372439696f50711eaf57d90" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SerializedDescriptor": "SurfaceDescription.BaseColor" +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "6fbdcc5a972b4fa883dc5f21e525a376", + "m_Id": 0, + "m_DisplayName": "A", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 3, + "m_Value": { + "x": 1.0, + "y": 1.0, + "z": 1.0, + "w": 1.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector2MaterialSlot", + "m_ObjectId": "70337a74f6ad4b7bb6befc825219bab1", + "m_Id": 6, + "m_DisplayName": "RG", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "RG", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "712da461f71a454db59d349f752d41ee", + "m_Id": 2, + "m_DisplayName": "Height", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Height", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "71dd947935b64ce38f0d25406dde447b", + "m_Id": 5, + "m_DisplayName": "G", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "G", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "724e17584e97443e9e285dfa7253c8e3", + "m_Id": 0, + "m_DisplayName": "Alpha", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Alpha", + "m_StageCapability": 2, + "m_Value": 0.15000000596046449, + "m_DefaultValue": 1.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Texture2DMaterialSlot", + "m_ObjectId": "72fb5a0d7796446b9e2b929cb32facdc", + "m_Id": 0, + "m_DisplayName": "_MainTex", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_BareResource": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.UVNode", + "m_ObjectId": "7444469eb9884253819add9ef96baa25", + "m_Group": { + "m_Id": "d258902c6ec74942afdb9ebf8c1d07f8" + }, + "m_Name": "UV", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4298.0, + "y": -3809.99951171875, + "width": 144.66648864746095, + "height": 129.33323669433595 + } + }, + "m_Slots": [ + { + "m_Id": "03182b3263304258b265266325c21f65" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_OutputChannel": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "748c31bbcecc4b30bec2e42c0612175b", + "m_Id": 0, + "m_DisplayName": "A", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 3, + "m_Value": { + "x": 1.0, + "y": 1.0, + "z": 1.0, + "w": 1.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.Internal.Vector2ShaderProperty", + "m_ObjectId": "74b41464cbed4e9e8e23af5ab9be40cf", + "m_Guid": { + "m_GuidSerialized": "41afbdcb-f3ae-4340-8973-1c1998c992a2" + }, + "m_Name": "Outline Offset 2", + "m_DefaultReferenceName": "", + "m_OverrideReferenceName": "_OutlineOffset2", + "m_GeneratePropertyBlock": true, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Texture2DInputMaterialSlot", + "m_ObjectId": "74cf69e61bef44589521f1bf2bf3c59a", + "m_Id": 1, + "m_DisplayName": "Texture", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Texture", + "m_StageCapability": 3, + "m_BareResource": false, + "m_Texture": { + "m_SerializedTexture": "{\"texture\":{\"instanceID\":0}}", + "m_Guid": "" + }, + "m_DefaultType": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.NormalMaterialSlot", + "m_ObjectId": "7564379492aa4c5a927ff3501acdc70d", + "m_Id": 0, + "m_DisplayName": "Normal (Tangent Space)", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "NormalTS", + "m_StageCapability": 2, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [], + "m_Space": 3 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector2MaterialSlot", + "m_ObjectId": "757174b6f25040fdbb20355a21752222", + "m_Id": 0, + "m_DisplayName": "Outline Offset 2", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "75aba700d74d4b2687bf3166cf1da3e2", + "m_Id": 2, + "m_DisplayName": "RGBA", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "RGBA", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector2MaterialSlot", + "m_ObjectId": "75c5657544c648058b20cea090f48dbf", + "m_Id": 0, + "m_DisplayName": "_OutlineUVSpeed", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0 + }, + "m_Labels": [ + "X", + "Y" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "767769f736d5478cba5f10a415e28e7f", + "m_Id": 5, + "m_DisplayName": "G", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "G", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicValueMaterialSlot", + "m_ObjectId": "773b90134e894e429203c0c83e80b9de", + "m_Id": 2, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "e00": 0.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 0.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 0.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 0.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "77991fa631724e0cb32eed66ff017b23", + "m_Id": 0, + "m_DisplayName": "Metallic", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Metallic", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "77e28f3e930b4c249145630ec961af95", + "m_Id": 0, + "m_DisplayName": "A", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BooleanMaterialSlot", + "m_ObjectId": "79147f6986644769b58d9ed64fe771e1", + "m_Id": 0, + "m_DisplayName": "OutlineMode", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": false, + "m_DefaultValue": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.MultiplyNode", + "m_ObjectId": "7984fd094e1147bdabb4e26fbd3d31c8", + "m_Group": { + "m_Id": "ecf16c34d46f4502ac601f0c38c7576b" + }, + "m_Name": "Multiply", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -3113.000244140625, + "y": -3468.0, + "width": 130.0, + "height": 118.0 + } + }, + "m_Slots": [ + { + "m_Id": "082e9706dffc4c188270980d4e44ce0f" + }, + { + "m_Id": "f2a351a5375c441b8d9ab7e2c9545a77" + }, + { + "m_Id": "41986ac6400d46709d0ef043a67f6b34" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 3, + "m_Type": "UnityEditor.ShaderGraph.Internal.ColorShaderProperty", + "m_ObjectId": "7a046f410ce64aa88438b0bfd412c045", + "m_Guid": { + "m_GuidSerialized": "d47271f5-5a84-47bf-a09e-c825d2aeb013" + }, + "m_Name": "Outline Color 3", + "m_DefaultReferenceName": "Color_551702C5", + "m_OverrideReferenceName": "_OutlineColor3", + "m_GeneratePropertyBlock": true, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": { + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 1.0 + }, + "m_ColorMode": 1 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "7a0f504e4175406dbd8134250f4e350b", + "m_Id": 0, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.SubtractNode", + "m_ObjectId": "7a80e8839f0e4a1d9a6c0814f8793ee6", + "m_Group": { + "m_Id": "42cadae0923e4969b50bbc3f78185934" + }, + "m_Name": "Subtract", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4961.99951171875, + "y": -3452.0, + "width": 130.0, + "height": 118.0 + } + }, + "m_Slots": [ + { + "m_Id": "6fbdcc5a972b4fa883dc5f21e525a376" + }, + { + "m_Id": "0ba4932e164847878ddb7b7bcff96985" + }, + { + "m_Id": "9178663316db43d582f1c4a127d307c6" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "7acfafd73b8c4dfab8c55c18a887e087", + "m_Id": 4, + "m_DisplayName": "R", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "R", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "7b8a19bd115e4167a25b59cb3218a817", + "m_Id": 0, + "m_DisplayName": "A", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 3, + "m_Value": { + "x": 1.0, + "y": 1.0, + "z": 1.0, + "w": 1.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicValueMaterialSlot", + "m_ObjectId": "7c27ccb2c2dc4ca59c5438c3358630ca", + "m_Id": 0, + "m_DisplayName": "A", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 3, + "m_Value": { + "e00": 0.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 0.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 0.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 0.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.Rendering.HighDefinition.ShaderGraph.HDTarget", + "m_ObjectId": "7cf0e63037a74dc2a9f591225c678ff4", + "m_ActiveSubTarget": { + "m_Id": "67bc2306558f4f2fa807637aaebaeab4" + }, + "m_Datas": [ + { + "m_Id": "00996039d61e400a9e854ce591ac35a0" + }, + { + "m_Id": "305e3be306674fcd8bb02273d27ee5b7" + }, + { + "m_Id": "6238ae56182d404f8563cb88cb801549" + }, + { + "m_Id": "a8c49a47cb934f7e8e4d88fce06df6ff" + } + ], + "m_CustomEditorGUI": "TMPro.EditorUtilities.TMP_SDF_HDRPLitShaderGUI" +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.SubtractNode", + "m_ObjectId": "7d7696aa6d184b4fb9c316a9dec37aee", + "m_Group": { + "m_Id": "42cadae0923e4969b50bbc3f78185934" + }, + "m_Name": "Subtract", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4959.0, + "y": -3326.0, + "width": 130.0, + "height": 118.0 + } + }, + "m_Slots": [ + { + "m_Id": "4d1cb1a475df49f9a148195a65f5453a" + }, + { + "m_Id": "47d020251e9841a5b1f0fd64396026a1" + }, + { + "m_Id": "62bc551cea604e88b7858cc37d96a98a" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.MultiplyNode", + "m_ObjectId": "7d78a616c2754cc28d1f32cf66ade611", + "m_Group": { + "m_Id": "013228b0fdf1424097798f0973a9a4fb" + }, + "m_Name": "Multiply", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4005.0, + "y": -2797.0, + "width": 130.0, + "height": 117.99999237060547 + } + }, + "m_Slots": [ + { + "m_Id": "d9bcb754db834583b6518c5ed5152114" + }, + { + "m_Id": "861d4258049a4a3e8164f7297090f88e" + }, + { + "m_Id": "a7c06457d7454693a8bc3dc95257b2c2" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "7e0fadb2533f496192c1ad3e78642010", + "m_Group": { + "m_Id": "484b51c50485473b819c4f05087b32d7" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4444.0, + "y": -4188.0, + "width": 173.0, + "height": 34.0 + } + }, + "m_Slots": [ + { + "m_Id": "d48c3871e3064027a10ae9f4babd3be0" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "952d0fa5cd744df0b434cd38e9a90b93" + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BlockNode", + "m_ObjectId": "7f2e6b5f15364ed9835d67d0cf4f8f65", + "m_Group": { + "m_Id": "" + }, + "m_Name": "VertexDescription.Tangent", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -2586.0, + "y": -3592.0, + "width": 200.0, + "height": 41.0 + } + }, + "m_Slots": [ + { + "m_Id": "85ff8667d72947edada4e9fb4ff60559" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SerializedDescriptor": "VertexDescription.Tangent" +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "7f3d71a6c96847c099da45f95aafbecb", + "m_Id": 1, + "m_DisplayName": "G", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "G", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BlockNode", + "m_ObjectId": "7f7d8028b58d4227a4560891be6e7cda", + "m_Group": { + "m_Id": "" + }, + "m_Name": "SurfaceDescription.Occlusion", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": 0.0, + "y": 0.0, + "width": 0.0, + "height": 0.0 + } + }, + "m_Slots": [ + { + "m_Id": "a00de0d572a84a08a23fe14c2ad5030d" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SerializedDescriptor": "SurfaceDescription.Occlusion" +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PositionMaterialSlot", + "m_ObjectId": "8036d0e6090b456e9b4ea87227868236", + "m_Id": 0, + "m_DisplayName": "Position", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Position", + "m_StageCapability": 1, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [ + "X", + "Y", + "Z" + ], + "m_Space": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "80e665a5eeb64730a51742f698bf0d48", + "m_Id": 4, + "m_DisplayName": "R", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "R", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "8135ca333f8f4ea78163743e6ec1f55c", + "m_Group": { + "m_Id": "42cadae0923e4969b50bbc3f78185934" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4081.999755859375, + "y": -3140.0, + "width": 156.0, + "height": 34.0 + } + }, + "m_Slots": [ + { + "m_Id": "d6a6a119394e4082a11bc024a6e42ef8" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "53073e5ea924459fa6681a4943e9f947" + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicValueMaterialSlot", + "m_ObjectId": "81bdb47901ef48e5a588c6724b1b0142", + "m_Id": 2, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "e00": 0.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 0.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 0.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 0.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.Internal.Vector1ShaderProperty", + "m_ObjectId": "81e8ed0534534674a74263e6161a2a1a", + "m_Guid": { + "m_GuidSerialized": "78aab961-c4a8-41f3-b203-1239c3b33b13" + }, + "m_Name": "Underlay Dilate", + "m_DefaultReferenceName": "Vector1_D48690B9", + "m_OverrideReferenceName": "_UnderlayDilate", + "m_GeneratePropertyBlock": true, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": 0.0, + "m_FloatType": 0, + "m_RangeValues": { + "x": 0.0, + "y": 1.0 + } +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.Internal.Vector1ShaderProperty", + "m_ObjectId": "82af2db1018543d7832af96c1cfc981f", + "m_Guid": { + "m_GuidSerialized": "37906c7b-9a3a-454b-a62a-9aa097e64bde" + }, + "m_Name": "Light Angle", + "m_DefaultReferenceName": "Vector1_82af2db1018543d7832af96c1cfc981f", + "m_OverrideReferenceName": "_LightAngle", + "m_GeneratePropertyBlock": true, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": 0.0, + "m_FloatType": 1, + "m_RangeValues": { + "x": 0.0, + "y": 6.28000020980835 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "82d5443fe54d4a3b9420f8745d00a632", + "m_Id": 5, + "m_DisplayName": "Softness", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Softness", + "m_StageCapability": 3, + "m_Value": 8.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector2MaterialSlot", + "m_ObjectId": "84dc74cdbd8c45e1b189e4fd9a69942d", + "m_Id": 0, + "m_DisplayName": "Outline Offset 3", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.CustomFunctionNode", + "m_ObjectId": "85a1ad8e741e41759002e8cdc8cd0b96", + "m_Group": { + "m_Id": "d0a791a544614667962a9a9a9ce0c68a" + }, + "m_Name": "ScreenSpaceRatio (Custom Function)", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -5800.99951171875, + "y": -3363.0, + "width": 258.0, + "height": 142.0 + } + }, + "m_Slots": [ + { + "m_Id": "6e13f3cd573c467a94379f45d96cb690" + }, + { + "m_Id": "8e6ed600f6504f4083092f5b511e44c4" + }, + { + "m_Id": "93b161cce4504cb79c97b6d8db178de7" + }, + { + "m_Id": "2bf5f2fdd2984599b7323d10cfb1d240" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SourceType": 0, + "m_FunctionName": "ScreenSpaceRatio", + "m_FunctionSource": "96de908384869cd409c75efa351d5edf", + "m_FunctionBody": "Enter function body here..." +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "85b5940eb77e4625812ded7215bab8d7", + "m_Group": { + "m_Id": "42cadae0923e4969b50bbc3f78185934" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4081.999755859375, + "y": -3096.0, + "width": 156.0, + "height": 34.0 + } + }, + "m_Slots": [ + { + "m_Id": "ada023d617104472b8ab75a81558c0a1" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "7a046f410ce64aa88438b0bfd412c045" + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.TangentMaterialSlot", + "m_ObjectId": "85ff8667d72947edada4e9fb4ff60559", + "m_Id": 0, + "m_DisplayName": "Tangent", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Tangent", + "m_StageCapability": 1, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [ + "X", + "Y", + "Z" + ], + "m_Space": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicValueMaterialSlot", + "m_ObjectId": "861d4258049a4a3e8164f7297090f88e", + "m_Id": 1, + "m_DisplayName": "B", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 3, + "m_Value": { + "e00": 2.0, + "e01": 2.0, + "e02": 2.0, + "e03": 2.0, + "e10": 2.0, + "e11": 2.0, + "e12": 2.0, + "e13": 2.0, + "e20": 2.0, + "e21": 2.0, + "e22": 2.0, + "e23": 2.0, + "e30": 2.0, + "e31": 2.0, + "e32": 2.0, + "e33": 2.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.Internal.Vector4ShaderProperty", + "m_ObjectId": "867a4ae13c0d4a028c71bc1063824c14", + "m_Guid": { + "m_GuidSerialized": "d483c212-0a30-4f6d-b94d-9abbc83a6522" + }, + "m_Name": "Outline Width", + "m_DefaultReferenceName": "Vector4_C68C9E14", + "m_OverrideReferenceName": "_IsoPerimeter", + "m_GeneratePropertyBlock": true, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 2, + "m_Hidden": false, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicValueMaterialSlot", + "m_ObjectId": "8695190a5e614f2d90081871a8a06fc2", + "m_Id": 1, + "m_DisplayName": "B", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 3, + "m_Value": { + "e00": 2.0, + "e01": 2.0, + "e02": 2.0, + "e03": 2.0, + "e10": 2.0, + "e11": 2.0, + "e12": 2.0, + "e13": 2.0, + "e20": 2.0, + "e21": 2.0, + "e22": 2.0, + "e23": 2.0, + "e30": 2.0, + "e31": 2.0, + "e32": 2.0, + "e33": 2.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "8764669016f6442f8152593c18a649d7", + "m_Id": 4, + "m_DisplayName": "RGBA", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "RGBA", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicValueMaterialSlot", + "m_ObjectId": "880bb02c6c6b49b18aa6ebc66dc566a0", + "m_Id": 0, + "m_DisplayName": "A", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 3, + "m_Value": { + "e00": 0.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 0.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 0.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 0.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.CustomFunctionNode", + "m_ObjectId": "88253223d2c34ecfab92b0c344048f94", + "m_Group": { + "m_Id": "484b51c50485473b819c4f05087b32d7" + }, + "m_Name": "ComputeSDF (Custom Function)", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4226.0, + "y": -4323.0, + "width": 227.99998474121095, + "height": 190.0 + } + }, + "m_Slots": [ + { + "m_Id": "c52a1744a9a14989b0ae452ad6de6061" + }, + { + "m_Id": "a03db80c558b4f87a330c5ae0a9443a5" + }, + { + "m_Id": "8f1b1d1e8ff24b3284993e52354e54fa" + }, + { + "m_Id": "5da82bf481f8489ebd05e997f617f51b" + }, + { + "m_Id": "82d5443fe54d4a3b9420f8745d00a632" + }, + { + "m_Id": "61133d79a89048c195f54939b2a1d30a" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SourceType": 0, + "m_FunctionName": "ComputeSDF", + "m_FunctionSource": "96de908384869cd409c75efa351d5edf", + "m_FunctionBody": "Enter function body here..." +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector2MaterialSlot", + "m_ObjectId": "8a08179f99d649d289b8053d5fa0ad22", + "m_Id": 0, + "m_DisplayName": "Underlay Offset", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0 + }, + "m_Labels": [ + "X", + "Y" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "8b66f4e6bc9d4662b3218ac33a69839f", + "m_Id": 5, + "m_DisplayName": "G", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "G", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "8c38a5d8327f456e9783740c05382619", + "m_Id": 3, + "m_DisplayName": "Color2", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Color2", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "8cbd81814903479ea1d3151c1f38183e", + "m_Id": 6, + "m_DisplayName": "B", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 3, + "m_Type": "UnityEditor.ShaderGraph.Internal.ColorShaderProperty", + "m_ObjectId": "8cf8aae64c1d443f9303126886b40f17", + "m_Guid": { + "m_GuidSerialized": "8d78c9a5-aaef-41fb-af68-2358e401d7ac" + }, + "m_Name": "_UnderlayColor", + "m_DefaultReferenceName": "Color_2F5FE804", + "m_OverrideReferenceName": "_UnderlayColor", + "m_GeneratePropertyBlock": true, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": { + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 1.0 + }, + "m_ColorMode": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector2MaterialSlot", + "m_ObjectId": "8e6ed600f6504f4083092f5b511e44c4", + "m_Id": 0, + "m_DisplayName": "UV", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "UV", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0 + }, + "m_Labels": [ + "X", + "Y" + ] +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.Internal.Vector2ShaderProperty", + "m_ObjectId": "8ed907a2cc7949b68a283ae243ea1977", + "m_Guid": { + "m_GuidSerialized": "36803443-a9bc-4f3c-a4f2-7d66a5417ac1" + }, + "m_Name": "Outline Offset 3", + "m_DefaultReferenceName": "", + "m_OverrideReferenceName": "_OutlineOffset3", + "m_GeneratePropertyBlock": true, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "8f1b1d1e8ff24b3284993e52354e54fa", + "m_Id": 3, + "m_DisplayName": "SDR", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "SDR", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "9147636b0cfa466a9b37a013d8f693bf", + "m_Group": { + "m_Id": "daaf032a109749a88c9b8ff8e1f8b541" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -5421.99951171875, + "y": -3902.0, + "width": 153.0, + "height": 34.0 + } + }, + "m_Slots": [ + { + "m_Id": "a4f471e3221c4134b291bd9d2ba22db6" + } + ], + "synonyms": [], + "m_Precision": 1, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "a6bbb32e8d884be9bb36db91fe4b81b1" + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "9178663316db43d582f1c4a127d307c6", + "m_Id": 2, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.SplitNode", + "m_ObjectId": "91890fe48ebe4717aea61ecaf3ad4861", + "m_Group": { + "m_Id": "ecf16c34d46f4502ac601f0c38c7576b" + }, + "m_Name": "Split", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -2983.000244140625, + "y": -3468.0, + "width": 119.99999237060547, + "height": 149.0 + } + }, + "m_Slots": [ + { + "m_Id": "3dccd64e7f324bc1a75c1479d7a67c51" + }, + { + "m_Id": "e444f2c81d1e48329fa2c91005277e8d" + }, + { + "m_Id": "b2c26292b7434733878a9b042f44de89" + }, + { + "m_Id": "964fea1fd4b24f4daf5bef84c4b45118" + }, + { + "m_Id": "deac82280a2b43078e0e40863e2d974c" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "91d6a9a5fbc04ea49075cb51835e7264", + "m_Id": 2, + "m_DisplayName": "B", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "928621a3ca2d41c89a10336bbbc81ddc", + "m_Id": 5, + "m_DisplayName": "G", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "G", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "93b161cce4504cb79c97b6d8db178de7", + "m_Id": 3, + "m_DisplayName": "TextureSize", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "TextureSize", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "945b45993dd84a979755b98c48138f72", + "m_Id": 0, + "m_DisplayName": "Width", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Width", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.Internal.Vector1ShaderProperty", + "m_ObjectId": "952d0fa5cd744df0b434cd38e9a90b93", + "m_Guid": { + "m_GuidSerialized": "ce395871-ddeb-47c3-a31d-07855800c197" + }, + "m_Name": "_UnderlaySoftness", + "m_DefaultReferenceName": "Vector1_F2B9E3EF", + "m_OverrideReferenceName": "_UnderlaySoftness", + "m_GeneratePropertyBlock": true, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": 0.0, + "m_FloatType": 0, + "m_RangeValues": { + "x": 0.0, + "y": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "95928bcb6a284b8d88105a84c2e1d3ce", + "m_Group": { + "m_Id": "013228b0fdf1424097798f0973a9a4fb" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4793.0, + "y": -2593.0, + "width": 155.0, + "height": 34.0 + } + }, + "m_Slots": [ + { + "m_Id": "d880558893fb442b9320cf55885d1117" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "2d0a269511e34bd1ba9056d2c939dff2" + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "964fea1fd4b24f4daf5bef84c4b45118", + "m_Id": 3, + "m_DisplayName": "B", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.GroupData", + "m_ObjectId": "98934a69591249d5b8b92b39045359a3", + "m_Title": "Outline1 Texture", + "m_Position": { + "x": -4672.0, + "y": -2481.0 + } +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.Internal.Vector1ShaderProperty", + "m_ObjectId": "998db5e5901e45b29040eb2099370071", + "m_Guid": { + "m_GuidSerialized": "6f383614-f2ad-4269-be8f-87b0ecb03cf0" + }, + "m_Name": "Bevel Clamp", + "m_DefaultReferenceName": "Vector1_5BD7E808", + "m_OverrideReferenceName": "_BevelClamp", + "m_GeneratePropertyBlock": true, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": 0.0, + "m_FloatType": 1, + "m_RangeValues": { + "x": 0.0, + "y": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.SampleTexture2DNode", + "m_ObjectId": "9c228fac287d446296b91a4acf5cec59", + "m_Group": { + "m_Id": "42cadae0923e4969b50bbc3f78185934" + }, + "m_Name": "Sample Texture 2D", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4600.0, + "y": -3498.0, + "width": 183.99998474121095, + "height": 253.0 + } + }, + "m_Slots": [ + { + "m_Id": "582d6e289dbe4fdca7cf0307273eaa2f" + }, + { + "m_Id": "1db37082bf844442804487b4944352de" + }, + { + "m_Id": "8b66f4e6bc9d4662b3218ac33a69839f" + }, + { + "m_Id": "4a66dcbe712a4d40bd8f355b834594b5" + }, + { + "m_Id": "a0285c9c381a49cba194709efa0a7c85" + }, + { + "m_Id": "b2728d0dd3ce40678867c94a7d977916" + }, + { + "m_Id": "e141833aa78b4fd59ecad949beb43a78" + }, + { + "m_Id": "51f76f8a53ad43a4ad028426548ce9ba" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_TextureType": 0, + "m_NormalMapSpace": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "9c26fdddba244d36a854298c00473247", + "m_Id": 3, + "m_DisplayName": "SDR", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "SDR", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "9d0c47172bf840a0ac029980ba082af7", + "m_Id": 0, + "m_DisplayName": "Smoothness", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Smoothness", + "m_StageCapability": 2, + "m_Value": 0.5, + "m_DefaultValue": 0.5, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.UVNode", + "m_ObjectId": "9d3c3383d5934a17bf9efbb7fd9e9043", + "m_Group": { + "m_Id": "42cadae0923e4969b50bbc3f78185934" + }, + "m_Name": "UV", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -5443.0, + "y": -3315.0, + "width": 144.99998474121095, + "height": 130.0 + } + }, + "m_Slots": [ + { + "m_Id": "232b1aa09e67479abae141d3c76d3c5b" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_OutputChannel": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "9e6e50a71d9843b49b62ebe1cf7d3d59", + "m_Group": { + "m_Id": "d258902c6ec74942afdb9ebf8c1d07f8" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4486.0, + "y": -3865.99951171875, + "width": 135.3330078125, + "height": 33.999996185302737 + } + }, + "m_Slots": [ + { + "m_Id": "3535ae87c6dd4769b52b20d9eca61069" + } + ], + "synonyms": [], + "m_Precision": 1, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "3e372195f4bd4845852a37839e5b602d" + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "9e87ce9607e14015a3790c528ca5dfda", + "m_Group": { + "m_Id": "98934a69591249d5b8b92b39045359a3" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4637.0, + "y": -2239.0, + "width": 167.0, + "height": 34.0 + } + }, + "m_Slots": [ + { + "m_Id": "75c5657544c648058b20cea090f48dbf" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "3fdf4b7bc5d4426492dcc057603ef4a6" + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicValueMaterialSlot", + "m_ObjectId": "9eb8137a6c2e41bbafdc8b0732dd47a3", + "m_Id": 0, + "m_DisplayName": "A", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 3, + "m_Value": { + "e00": 0.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 0.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 0.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 0.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BooleanMaterialSlot", + "m_ObjectId": "9eeec1a9713045af8845cea263d5ea48", + "m_Id": 6, + "m_DisplayName": "IsFront", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "IsFront", + "m_StageCapability": 3, + "m_Value": false, + "m_DefaultValue": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.MultiplyNode", + "m_ObjectId": "9f0de188085746d5a19073da1de85ddb", + "m_Group": { + "m_Id": "013228b0fdf1424097798f0973a9a4fb" + }, + "m_Name": "Multiply", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4160.0, + "y": -2739.0, + "width": 130.0, + "height": 117.99999237060547 + } + }, + "m_Slots": [ + { + "m_Id": "7c27ccb2c2dc4ca59c5438c3358630ca" + }, + { + "m_Id": "373f1de8db6c429c9d46c781f741d7a4" + }, + { + "m_Id": "fd0b096ed5b74f9e9ec51327be200731" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "a00de0d572a84a08a23fe14c2ad5030d", + "m_Id": 0, + "m_DisplayName": "Ambient Occlusion", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Occlusion", + "m_StageCapability": 2, + "m_Value": 1.0, + "m_DefaultValue": 1.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "a0285c9c381a49cba194709efa0a7c85", + "m_Id": 7, + "m_DisplayName": "A", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "a03db80c558b4f87a330c5ae0a9443a5", + "m_Id": 1, + "m_DisplayName": "SD", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "SD", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.NormalMaterialSlot", + "m_ObjectId": "a3f8b6e8ae7f48e2989a029904401502", + "m_Id": 0, + "m_DisplayName": "Normal", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Normal", + "m_StageCapability": 1, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [ + "X", + "Y", + "Z" + ], + "m_Space": 0 +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.CustomFunctionNode", + "m_ObjectId": "a455bd79094c4413a7b7dd80ca8b9368", + "m_Group": { + "m_Id": "013228b0fdf1424097798f0973a9a4fb" + }, + "m_Name": "GenerateUV (Custom Function)", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4611.0, + "y": -2691.0, + "width": 222.0, + "height": 142.0 + } + }, + "m_Slots": [ + { + "m_Id": "ffb07af0bca546d8b9bc439d34aa68f5" + }, + { + "m_Id": "2c7a9460724b47daad8df1be144de7c6" + }, + { + "m_Id": "55ffa45ec3654d5e88089fb40d2b0465" + }, + { + "m_Id": "e495a9f7a11f4eb89334e83be154ceb9" + } + ], + "synonyms": [], + "m_Precision": 1, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SourceType": 0, + "m_FunctionName": "GenerateUV", + "m_FunctionSource": "96de908384869cd409c75efa351d5edf", + "m_FunctionBody": "Enter function body here..." +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.SamplerStateShaderProperty", + "m_ObjectId": "a4ad98d8828c424384229c344ebe2ed0", + "m_Guid": { + "m_GuidSerialized": "f98fc1a2-bb81-4bd1-a207-23d3a90d518e" + }, + "m_Name": "SamplerState", + "m_DefaultReferenceName": "", + "m_OverrideReferenceName": "SamplerState_Linear_Clamp", + "m_GeneratePropertyBlock": false, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": { + "m_filter": 0, + "m_wrap": 1 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "a4f471e3221c4134b291bd9d2ba22db6", + "m_Id": 0, + "m_DisplayName": "_GradientScale", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "a535f3bcbeb14622bb177eb6f46e76f4", + "m_Group": { + "m_Id": "98934a69591249d5b8b92b39045359a3" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4647.0, + "y": -2283.0, + "width": 177.00001525878907, + "height": 34.0 + } + }, + "m_Slots": [ + { + "m_Id": "6dfc1177dd0541a7a780fbf911ad1956" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "ec79eb447dfd47a9b3380344c6a60f43" + } +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.Internal.Vector1ShaderProperty", + "m_ObjectId": "a6bbb32e8d884be9bb36db91fe4b81b1", + "m_Guid": { + "m_GuidSerialized": "6aa76edf-7b80-46ac-add4-406cf1d85493" + }, + "m_Name": "_GradientScale", + "m_DefaultReferenceName": "Vector1_EAE27356", + "m_OverrideReferenceName": "_GradientScale", + "m_GeneratePropertyBlock": true, + "m_Precision": 1, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": 10.0, + "m_FloatType": 0, + "m_RangeValues": { + "x": 0.0, + "y": 1.0 + } +} + +{ + "m_SGVersion": 3, + "m_Type": "UnityEditor.ShaderGraph.Internal.ColorShaderProperty", + "m_ObjectId": "a6c38edd2e8743a9b057ba8452b9f129", + "m_Guid": { + "m_GuidSerialized": "9fc942ee-4a1d-4ced-a5a6-81893e3ddb63" + }, + "m_Name": "Light Color", + "m_DefaultReferenceName": "Color_a6c38edd2e8743a9b057ba8452b9f129", + "m_OverrideReferenceName": "_SpecularColor", + "m_GeneratePropertyBlock": true, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": { + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "m_ColorMode": 1 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "a75f7ac601c446469802fe7754c1f279", + "m_Id": 0, + "m_DisplayName": "Color1", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Color1", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "a7942746b5564dc7bbbae1deb2403022", + "m_Id": 0, + "m_DisplayName": "_GradientScale", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicValueMaterialSlot", + "m_ObjectId": "a7c06457d7454693a8bc3dc95257b2c2", + "m_Id": 2, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "e00": 0.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 0.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 0.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 0.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.Rendering.HighDefinition.ShaderGraph.LightingData", + "m_ObjectId": "a8c49a47cb934f7e8e4d88fce06df6ff", + "m_NormalDropOffSpace": 0, + "m_BlendPreserveSpecular": true, + "m_ReceiveDecals": true, + "m_ReceiveSSR": true, + "m_ReceiveSSRTransparent": false, + "m_SpecularAA": false, + "m_SpecularOcclusionMode": 0, + "m_OverrideBakedGI": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "aa2794b8f0e24bf281d22e0fef0647be", + "m_Id": 2, + "m_DisplayName": "B", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.CustomFunctionNode", + "m_ObjectId": "aa3e347d733e48f7b65d8a8847370eec", + "m_Group": { + "m_Id": "" + }, + "m_Name": "EvaluateLight (Custom Function)", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -3631.0, + "y": -3810.0, + "width": 230.0, + "height": 118.0 + } + }, + "m_Slots": [ + { + "m_Id": "0699eea947fc426cbfeb8744cf120222" + }, + { + "m_Id": "0c4dc51f26484c26ad88a3fe4002abcd" + }, + { + "m_Id": "d5173cc3c6cd4f1998550f3187a3e9c8" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SourceType": 0, + "m_FunctionName": "EvaluateLight", + "m_FunctionSource": "96de908384869cd409c75efa351d5edf", + "m_FunctionBody": "Enter function body here..." +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "aa87c72ac0e64469acc34f936f00b3d0", + "m_Group": { + "m_Id": "484b51c50485473b819c4f05087b32d7" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4444.0, + "y": -4225.0, + "width": 193.0, + "height": 34.0 + } + }, + "m_Slots": [ + { + "m_Id": "0d7878dd226d4cfb81a991dc312309fc" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "81e8ed0534534674a74263e6161a2a1a" + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "abd59150589b436cadf8c9e6f43ccb8e", + "m_Id": 0, + "m_DisplayName": "RGBA", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "RGBA", + "m_StageCapability": 2, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BlockNode", + "m_ObjectId": "aca823a8188948c782eddaf0f45e1868", + "m_Group": { + "m_Id": "" + }, + "m_Name": "SurfaceDescription.NormalOS", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -2542.0, + "y": -3404.000244140625, + "width": 200.0, + "height": 40.66650390625 + } + }, + "m_Slots": [ + { + "m_Id": "e386b183a18245a796b024022f7f3074" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SerializedDescriptor": "SurfaceDescription.NormalOS" +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Texture2DPropertiesNode", + "m_ObjectId": "acd0cd5a177f4a97bf23db7219305e3f", + "m_Group": { + "m_Id": "d258902c6ec74942afdb9ebf8c1d07f8" + }, + "m_Name": "Texel Size", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4348.0, + "y": -3905.99951171875, + "width": 185.33299255371095, + "height": 101.33324432373047 + } + }, + "m_Slots": [ + { + "m_Id": "945b45993dd84a979755b98c48138f72" + }, + { + "m_Id": "e51a636b2621440eb94cc802c1cf4bfc" + }, + { + "m_Id": "1bdde3efd3b7464b8934c555be0f8a48" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "ada023d617104472b8ab75a81558c0a1", + "m_Id": 0, + "m_DisplayName": "Outline Color 3", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "aef5c44f84e04c3185e0b93e95e34204", + "m_Group": { + "m_Id": "42cadae0923e4969b50bbc3f78185934" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -5264.99951171875, + "y": -3142.0, + "width": 159.0, + "height": 34.0 + } + }, + "m_Slots": [ + { + "m_Id": "84dc74cdbd8c45e1b189e4fd9a69942d" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "8ed907a2cc7949b68a283ae243ea1977" + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Texture2DInputMaterialSlot", + "m_ObjectId": "b000f852aa984e9dae25b125a4607f4e", + "m_Id": 1, + "m_DisplayName": "Texture", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Texture", + "m_StageCapability": 3, + "m_BareResource": false, + "m_Texture": { + "m_SerializedTexture": "{\"texture\":{\"instanceID\":0}}", + "m_Guid": "" + }, + "m_DefaultType": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "b015d1b7e4134c59baf6851e7649802c", + "m_Id": 0, + "m_DisplayName": "R", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "R", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.Internal.Vector1ShaderProperty", + "m_ObjectId": "b0b352c4503a43d083a64e57352b29a0", + "m_Guid": { + "m_GuidSerialized": "01cfcc78-60aa-4f71-a1e3-8d8df6dae253" + }, + "m_Name": "Reflectivity Power", + "m_DefaultReferenceName": "Vector1_b0b352c4503a43d083a64e57352b29a0", + "m_OverrideReferenceName": "_Reflectivity", + "m_GeneratePropertyBlock": true, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": 5.0, + "m_FloatType": 1, + "m_RangeValues": { + "x": 5.0, + "y": 15.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.VertexColorNode", + "m_ObjectId": "b1188549725543d485436c2e921ffbb2", + "m_Group": { + "m_Id": "013228b0fdf1424097798f0973a9a4fb" + }, + "m_Name": "Vertex Color", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4146.0, + "y": -2833.0, + "width": 116.0, + "height": 94.0 + } + }, + "m_Slots": [ + { + "m_Id": "281bcee4777040f8a31ee0e10344e98d" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 2, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.SampleTexture2DNode", + "m_ObjectId": "b163c9f1666644b0bba62cf0e12df7bc", + "m_Group": { + "m_Id": "013228b0fdf1424097798f0973a9a4fb" + }, + "m_Name": "Sample Texture 2D", + "m_DrawState": { + "m_Expanded": false, + "m_Position": { + "serializedVersion": "2", + "x": -4373.0, + "y": -2715.0, + "width": 180.0, + "height": 181.0 + } + }, + "m_Slots": [ + { + "m_Id": "cce40479b6284b6fa3174db9f09d0ac9" + }, + { + "m_Id": "80e665a5eeb64730a51742f698bf0d48" + }, + { + "m_Id": "1f46181633594ae0a1fb2adb76b42981" + }, + { + "m_Id": "8cbd81814903479ea1d3151c1f38183e" + }, + { + "m_Id": "cfaf3f3a5a1146e194cddad30c95aada" + }, + { + "m_Id": "b43489e37a5c4df88f15844292a55ec7" + }, + { + "m_Id": "cd7281fb41aa4e61ac0fdf71d4f4bd46" + }, + { + "m_Id": "f01d52cdcb1647aab35782b4af535efd" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_TextureType": 0, + "m_NormalMapSpace": 1 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicValueMaterialSlot", + "m_ObjectId": "b224a1cf80604103ad085c799995f3c2", + "m_Id": 2, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "e00": 0.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 0.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 0.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 0.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Texture2DInputMaterialSlot", + "m_ObjectId": "b2728d0dd3ce40678867c94a7d977916", + "m_Id": 1, + "m_DisplayName": "Texture", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Texture", + "m_StageCapability": 3, + "m_BareResource": false, + "m_Texture": { + "m_SerializedTexture": "{\"texture\":{\"fileID\":-2362172177983852347,\"guid\":\"dda5bcb0d1e9515498f6e4e038bbefe6\",\"type\":2}}", + "m_Guid": "" + }, + "m_DefaultType": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "b2baf44eae52473cb6cda7b1debece01", + "m_Id": 0, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "b2c26292b7434733878a9b042f44de89", + "m_Id": 2, + "m_DisplayName": "G", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "G", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.NormalMaterialSlot", + "m_ObjectId": "b30617d78dec40a7b8aa7f72dca7f41d", + "m_Id": 0, + "m_DisplayName": "Bent Normal", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "BentNormal", + "m_StageCapability": 2, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [], + "m_Space": 3 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "b42e6dbfbc864097af182cbff5c0c1fb", + "m_Id": 0, + "m_DisplayName": "Outline Color 1", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Texture2DInputMaterialSlot", + "m_ObjectId": "b43489e37a5c4df88f15844292a55ec7", + "m_Id": 1, + "m_DisplayName": "Texture", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Texture", + "m_StageCapability": 3, + "m_BareResource": false, + "m_Texture": { + "m_SerializedTexture": "{\"texture\":{\"fileID\":-2362172177983852347,\"guid\":\"dda5bcb0d1e9515498f6e4e038bbefe6\",\"type\":2}}", + "m_Guid": "" + }, + "m_DefaultType": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.MultiplyNode", + "m_ObjectId": "b4a40cb6acd441acb83cfe0240bf910d", + "m_Group": { + "m_Id": "484b51c50485473b819c4f05087b32d7" + }, + "m_Name": "Multiply", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4750.99951171875, + "y": -4274.0, + "width": 130.0, + "height": 118.0 + } + }, + "m_Slots": [ + { + "m_Id": "d0b10e52e21941b183f5f635894c76c8" + }, + { + "m_Id": "0d6a57754b824f6db9cefa6953bc06a9" + }, + { + "m_Id": "773b90134e894e429203c0c83e80b9de" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector2MaterialSlot", + "m_ObjectId": "b4c4676c68bb4752af59e21f896d9470", + "m_Id": 0, + "m_DisplayName": "UV_1", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "UV_1", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Texture2DPropertiesNode", + "m_ObjectId": "b571db753a1948d5a6f1de4e7d0c7238", + "m_Group": { + "m_Id": "daaf032a109749a88c9b8ff8e1f8b541" + }, + "m_Name": "Texel Size", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -5581.99951171875, + "y": -3867.0, + "width": 183.99998474121095, + "height": 100.99999237060547 + } + }, + "m_Slots": [ + { + "m_Id": "5b3ff4ee364f4d7a923b530ad60d8762" + }, + { + "m_Id": "c183b5bd9bbe45089f93996e73110918" + }, + { + "m_Id": "1196ae398cc348349ab0c1a23fdab4bd" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "b691728a389a417d9b4f2d02541209c2", + "m_Id": 6, + "m_DisplayName": "B", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "b7f9ac55517141868bfb9d2ad6429792", + "m_Id": 6, + "m_DisplayName": "B", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "b85d677872b44421bf5536f42ba0267c", + "m_Id": 3, + "m_DisplayName": "Color0", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Color0", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BlockNode", + "m_ObjectId": "bc782d8e80154073b48a687a07adf60a", + "m_Group": { + "m_Id": "" + }, + "m_Name": "SurfaceDescription.BentNormal", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": 0.0, + "y": 0.0, + "width": 0.0, + "height": 0.0 + } + }, + "m_Slots": [ + { + "m_Id": "b30617d78dec40a7b8aa7f72dca7f41d" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SerializedDescriptor": "SurfaceDescription.BentNormal" +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.CombineNode", + "m_ObjectId": "bc9afcb18afa4ccc82d2cdc34d3f4641", + "m_Group": { + "m_Id": "daaf032a109749a88c9b8ff8e1f8b541" + }, + "m_Name": "Combine", + "m_DrawState": { + "m_Expanded": false, + "m_Position": { + "serializedVersion": "2", + "x": -5392.0, + "y": -3867.0, + "width": 125.99999237060547, + "height": 118.0 + } + }, + "m_Slots": [ + { + "m_Id": "5e42524569844befad16fda5a94eb9cb" + }, + { + "m_Id": "54d7a93ffec5490aa4591da23a21b693" + }, + { + "m_Id": "aa2794b8f0e24bf281d22e0fef0647be" + }, + { + "m_Id": "200245fc8bbe4826b209ab5f7ffe074c" + }, + { + "m_Id": "fc2e62201c5847e798fd939314413fcd" + }, + { + "m_Id": "fe11fa80cc1847a5a37f6757d521cf25" + }, + { + "m_Id": "de0c6f7f7af94defa6c3dbc6433de9d4" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BlockNode", + "m_ObjectId": "be58359e488f42e9b5121357d0fa526b", + "m_Group": { + "m_Id": "" + }, + "m_Name": "SurfaceDescription.Metallic", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": 0.0, + "y": 0.0, + "width": 0.0, + "height": 0.0 + } + }, + "m_Slots": [ + { + "m_Id": "77991fa631724e0cb32eed66ff017b23" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SerializedDescriptor": "SurfaceDescription.Metallic" +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "c183b5bd9bbe45089f93996e73110918", + "m_Id": 2, + "m_DisplayName": "Height", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Height", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.CustomFunctionNode", + "m_ObjectId": "c234e5216678436195ee1a5914bc79da", + "m_Group": { + "m_Id": "98934a69591249d5b8b92b39045359a3" + }, + "m_Name": "GenerateUV (Custom Function)", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4446.0, + "y": -2347.000244140625, + "width": 222.00001525878907, + "height": 142.0 + } + }, + "m_Slots": [ + { + "m_Id": "b4c4676c68bb4752af59e21f896d9470" + }, + { + "m_Id": "3db1608e927e4102a3c3a88e9fcab39a" + }, + { + "m_Id": "0f7ffb6d2de4447f9736780cbcee8e07" + }, + { + "m_Id": "d4954b7bbbb0412cbc997bcbe7dfa808" + } + ], + "synonyms": [], + "m_Precision": 1, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SourceType": 0, + "m_FunctionName": "GenerateUV", + "m_FunctionSource": "96de908384869cd409c75efa351d5edf", + "m_FunctionBody": "Enter function body here..." +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.UVMaterialSlot", + "m_ObjectId": "c35312edaa2344788b1964ee2f63a236", + "m_Id": 2, + "m_DisplayName": "UV", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "UV", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0 + }, + "m_Labels": [], + "m_Channel": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Texture2DMaterialSlot", + "m_ObjectId": "c3e6d7c20c184bf39fd8822130e693e7", + "m_Id": 0, + "m_DisplayName": "_MainTex", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_BareResource": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector2MaterialSlot", + "m_ObjectId": "c422a9a9ff824176aad2241f58c44d0b", + "m_Id": 0, + "m_DisplayName": "Outline Offset 1", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "c478c32c45884c57a62f7b2aa8ddc3b0", + "m_Id": 2, + "m_DisplayName": "Alpha", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Alpha", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "c52a1744a9a14989b0ae452ad6de6061", + "m_Id": 0, + "m_DisplayName": "SSR", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "SSR", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "c6bdb985bc16435fa72f5a3c81bb633c", + "m_Id": 6, + "m_DisplayName": "B", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "c7d4094601ac4bc1aead609c72b1f1c1", + "m_Id": 4, + "m_DisplayName": "R", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "R", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "c7ddee91dc5b48dc828309c77fdb0b88", + "m_Group": { + "m_Id": "484b51c50485473b819c4f05087b32d7" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4444.0, + "y": -4266.0, + "width": 153.0, + "height": 34.0 + } + }, + "m_Slots": [ + { + "m_Id": "a7942746b5564dc7bbbae1deb2403022" + } + ], + "synonyms": [], + "m_Precision": 1, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "a6bbb32e8d884be9bb36db91fe4b81b1" + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.SamplerStateMaterialSlot", + "m_ObjectId": "c88fcbaeea954a5f9c68c339fa8b604d", + "m_Id": 3, + "m_DisplayName": "Sampler", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Sampler", + "m_StageCapability": 3, + "m_BareResource": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "c9b722d107ce4cd6a748c883472b9b0f", + "m_Id": 7, + "m_DisplayName": "A", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "c9d7f0dbae7d422985a1cc87c025e76b", + "m_Group": { + "m_Id": "42cadae0923e4969b50bbc3f78185934" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4315.0, + "y": -3165.0, + "width": 144.0, + "height": 34.0 + } + }, + "m_Slots": [ + { + "m_Id": "79147f6986644769b58d9ed64fe771e1" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "cb3c0c3f08654b068bea44c4ffb15f4a" + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Internal.Texture2DShaderProperty", + "m_ObjectId": "c9ec735d1a1046769e5601b2c97c849a", + "m_Guid": { + "m_GuidSerialized": "281a9526-c332-4471-a44e-ece4a1e95ef6" + }, + "m_Name": "Face Texture", + "m_DefaultReferenceName": "Texture2D_75569DEA", + "m_OverrideReferenceName": "_FaceTex", + "m_GeneratePropertyBlock": true, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": { + "m_SerializedTexture": "{\"texture\":{\"instanceID\":0}}", + "m_Guid": "" + }, + "m_Modifiable": true, + "m_DefaultType": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "ca2a1083dc014f39ab8af0cdf140866b", + "m_Id": 0, + "m_DisplayName": "_FaceTexture_ST", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Internal.BooleanShaderProperty", + "m_ObjectId": "cb3c0c3f08654b068bea44c4ffb15f4a", + "m_Guid": { + "m_GuidSerialized": "21009d12-8d94-4273-b0d0-a8ee0608ddcf" + }, + "m_Name": "OutlineMode", + "m_DefaultReferenceName": "Boolean_cb3c0c3f08654b068bea44c4ffb15f4a", + "m_OverrideReferenceName": "_OutlineMode", + "m_GeneratePropertyBlock": true, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.SamplerStateMaterialSlot", + "m_ObjectId": "cb5e9f9567e84f8fa5463efc0e256e19", + "m_Id": 3, + "m_DisplayName": "Sampler", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Sampler", + "m_StageCapability": 3, + "m_BareResource": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BlockNode", + "m_ObjectId": "cb7117ecb1d047a8b2cb00ed552cb181", + "m_Group": { + "m_Id": "" + }, + "m_Name": "SurfaceDescription.Alpha", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -3032.66650390625, + "y": -3029.33349609375, + "width": 200.0, + "height": 41.33349609375 + } + }, + "m_Slots": [ + { + "m_Id": "724e17584e97443e9e285dfa7253c8e3" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SerializedDescriptor": "SurfaceDescription.Alpha" +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "cc88101667c9488f9c5a716e851c1b21", + "m_Id": 3, + "m_DisplayName": "Color0", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Color0", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "cce40479b6284b6fa3174db9f09d0ac9", + "m_Id": 0, + "m_DisplayName": "RGBA", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "RGBA", + "m_StageCapability": 2, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.UVMaterialSlot", + "m_ObjectId": "cd7281fb41aa4e61ac0fdf71d4f4bd46", + "m_Id": 2, + "m_DisplayName": "UV", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "UV", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0 + }, + "m_Labels": [ + "X", + "Y" + ], + "m_Channel": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.SamplerStateMaterialSlot", + "m_ObjectId": "cda5e3b4c1054bf3a65c0b7ec6bc778a", + "m_Id": 3, + "m_DisplayName": "Sampler", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Sampler", + "m_StageCapability": 3, + "m_BareResource": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.SampleTexture2DNode", + "m_ObjectId": "cdddee3a537c464697357f11b966f9b8", + "m_Group": { + "m_Id": "484b51c50485473b819c4f05087b32d7" + }, + "m_Name": "Sample Texture 2D", + "m_DrawState": { + "m_Expanded": false, + "m_Position": { + "serializedVersion": "2", + "x": -4420.0, + "y": -4483.0, + "width": 156.0, + "height": 181.0 + } + }, + "m_Slots": [ + { + "m_Id": "41b9b79b3859472882bcea393703eec0" + }, + { + "m_Id": "c7d4094601ac4bc1aead609c72b1f1c1" + }, + { + "m_Id": "767769f736d5478cba5f10a415e28e7f" + }, + { + "m_Id": "b691728a389a417d9b4f2d02541209c2" + }, + { + "m_Id": "045c4f6b050549c7a0efb208e6349779" + }, + { + "m_Id": "509e6f38505b4b0695b263706a55028f" + }, + { + "m_Id": "204dacb5a95b424facf11cb6f65bd188" + }, + { + "m_Id": "35cbea6373dd4e4f8d0fea36e8add392" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_TextureType": 0, + "m_NormalMapSpace": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "cfaf3f3a5a1146e194cddad30c95aada", + "m_Id": 7, + "m_DisplayName": "A", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.GroupData", + "m_ObjectId": "d0a791a544614667962a9a9a9ce0c68a", + "m_Title": "Screen Space Ratio", + "m_Position": { + "x": -6179.99951171875, + "y": -3422.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicValueMaterialSlot", + "m_ObjectId": "d0b10e52e21941b183f5f635894c76c8", + "m_Id": 0, + "m_DisplayName": "A", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 3, + "m_Value": { + "e00": 0.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 0.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 0.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 0.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "d1a17e42e7a04dc38984e3c01149445b", + "m_Id": 7, + "m_DisplayName": "A", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "d219977210094c0082c517d8dc00c8bb", + "m_Id": 0, + "m_DisplayName": "RGBA", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "RGBA", + "m_StageCapability": 2, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.GroupData", + "m_ObjectId": "d258902c6ec74942afdb9ebf8c1d07f8", + "m_Title": "Generate Normal", + "m_Position": { + "x": -4511.33349609375, + "y": -3999.3330078125 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.UVMaterialSlot", + "m_ObjectId": "d30452ac6b244ecca03df4d7b4de9f81", + "m_Id": 2, + "m_DisplayName": "UV", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "UV", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0 + }, + "m_Labels": [], + "m_Channel": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "d48c3871e3064027a10ae9f4babd3be0", + "m_Id": 0, + "m_DisplayName": "_UnderlaySoftness", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector2MaterialSlot", + "m_ObjectId": "d4954b7bbbb0412cbc997bcbe7dfa808", + "m_Id": 2, + "m_DisplayName": "UV", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "UV", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0 + }, + "m_Labels": [ + "X", + "Y" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "d4df208fc23b42f2b52364124f1b661c", + "m_Group": { + "m_Id": "42cadae0923e4969b50bbc3f78185934" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -5268.0, + "y": -3261.0, + "width": 159.0, + "height": 34.0 + } + }, + "m_Slots": [ + { + "m_Id": "757174b6f25040fdbb20355a21752222" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "74b41464cbed4e9e8e23af5ab9be40cf" + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector3MaterialSlot", + "m_ObjectId": "d5173cc3c6cd4f1998550f3187a3e9c8", + "m_Id": 0, + "m_DisplayName": "Normal", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Normal", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [ + "X", + "Y", + "Z" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "d6a6a119394e4082a11bc024a6e42ef8", + "m_Id": 0, + "m_DisplayName": "Outline Color 2", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector2MaterialSlot", + "m_ObjectId": "d880558893fb442b9320cf55885d1117", + "m_Id": 0, + "m_DisplayName": "_FaceUVSpeed", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0 + }, + "m_Labels": [ + "X", + "Y" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "d8edec16956c4f15b7d51d6ec10753f4", + "m_Id": 2, + "m_DisplayName": "B", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicValueMaterialSlot", + "m_ObjectId": "d9bcb754db834583b6518c5ed5152114", + "m_Id": 0, + "m_DisplayName": "A", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 3, + "m_Value": { + "e00": 0.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 0.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 0.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 0.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "d9dc4839ee2847999110bdb234d6041a", + "m_Id": 1, + "m_DisplayName": "G", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "G", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Texture2DMaterialSlot", + "m_ObjectId": "da7a06d393a44089842070d51d2aa0a6", + "m_Id": 0, + "m_DisplayName": "_MainTex", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_BareResource": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.GroupData", + "m_ObjectId": "daaf032a109749a88c9b8ff8e1f8b541", + "m_Title": "Offset Scale", + "m_Position": { + "x": -5747.99951171875, + "y": -3961.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.UVNode", + "m_ObjectId": "dbcb748279484a4590e53518c49122b8", + "m_Group": { + "m_Id": "013228b0fdf1424097798f0973a9a4fb" + }, + "m_Name": "UV", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4783.0, + "y": -2765.0, + "width": 145.0, + "height": 130.0 + } + }, + "m_Slots": [ + { + "m_Id": "7a0f504e4175406dbd8134250f4e350b" + } + ], + "synonyms": [], + "m_Precision": 1, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_OutputChannel": 1 +} + +{ + "m_SGVersion": 3, + "m_Type": "UnityEditor.ShaderGraph.Internal.ColorShaderProperty", + "m_ObjectId": "dc75c4e3a1bc4bb0a128086c2b0679a5", + "m_Guid": { + "m_GuidSerialized": "85cd941f-2fd2-43a3-b0fa-9f728bfb4220" + }, + "m_Name": "Face Color", + "m_DefaultReferenceName": "Color_99AFBB3D", + "m_OverrideReferenceName": "_FaceColor", + "m_GeneratePropertyBlock": true, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": { + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "m_ColorMode": 1 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector2MaterialSlot", + "m_ObjectId": "de0c6f7f7af94defa6c3dbc6433de9d4", + "m_Id": 6, + "m_DisplayName": "RG", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "RG", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "deac82280a2b43078e0e40863e2d974c", + "m_Id": 4, + "m_DisplayName": "A", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Texture2DMaterialSlot", + "m_ObjectId": "def8e0b9d8384982bc5b4c32d877e458", + "m_Id": 0, + "m_DisplayName": "Outline Texture", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_BareResource": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.SubtractNode", + "m_ObjectId": "dff7a66b353a4023b29c9d937da77960", + "m_Group": { + "m_Id": "484b51c50485473b819c4f05087b32d7" + }, + "m_Name": "Subtract", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4602.0, + "y": -4298.0, + "width": 130.0, + "height": 118.0 + } + }, + "m_Slots": [ + { + "m_Id": "7b8a19bd115e4167a25b59cb3218a817" + }, + { + "m_Id": "0b57f2d35157477ab2b29a5aac14ae8b" + }, + { + "m_Id": "e9e06fcb161e44ba8cc9f6f60264df78" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.UVMaterialSlot", + "m_ObjectId": "e141833aa78b4fd59ecad949beb43a78", + "m_Id": 2, + "m_DisplayName": "UV", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "UV", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0 + }, + "m_Labels": [ + "X", + "Y" + ], + "m_Channel": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "e2d28f29bbac4983a401574480b5ca28", + "m_Id": 1, + "m_DisplayName": "R", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "R", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.NormalMaterialSlot", + "m_ObjectId": "e386b183a18245a796b024022f7f3074", + "m_Id": 0, + "m_DisplayName": "Normal (Object Space)", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "NormalOS", + "m_StageCapability": 2, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [ + "X", + "Y", + "Z" + ], + "m_Space": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "e444f2c81d1e48329fa2c91005277e8d", + "m_Id": 1, + "m_DisplayName": "R", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "R", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector2MaterialSlot", + "m_ObjectId": "e495a9f7a11f4eb89334e83be154ceb9", + "m_Id": 2, + "m_DisplayName": "UV", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "UV", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0 + }, + "m_Labels": [ + "X", + "Y" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "e51a636b2621440eb94cc802c1cf4bfc", + "m_Id": 2, + "m_DisplayName": "Height", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Height", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BlockNode", + "m_ObjectId": "e591df3a1eb94e259b762f2830b407e2", + "m_Group": { + "m_Id": "" + }, + "m_Name": "SurfaceDescription.Emission", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": 0.0, + "y": 0.0, + "width": 0.0, + "height": 0.0 + } + }, + "m_Slots": [ + { + "m_Id": "4590bfa2a0664b65b6f073bae33a071f" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SerializedDescriptor": "SurfaceDescription.Emission" +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "e6e80c6b0db545cda26b079a9a78fbb3", + "m_Id": 5, + "m_DisplayName": "G", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "G", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.CustomFunctionNode", + "m_ObjectId": "e818605f8f5a4f01bf61caaa33693581", + "m_Group": { + "m_Id": "42cadae0923e4969b50bbc3f78185934" + }, + "m_Name": "ComputeSDF44 (Custom Function)", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4144.0, + "y": -3369.0, + "width": 244.0, + "height": 214.0 + } + }, + "m_Slots": [ + { + "m_Id": "641eda269d7b4da9acb65f8d50035ea9" + }, + { + "m_Id": "f6823778a3cf42d5bbe8a83e5f9c9fa3" + }, + { + "m_Id": "9c26fdddba244d36a854298c00473247" + }, + { + "m_Id": "f684c5678e9e4f078157a3ab7ef5057b" + }, + { + "m_Id": "14ad19bf20a140dd88d58452d7df688b" + }, + { + "m_Id": "215a82c127204988b751de7d3a39b955" + }, + { + "m_Id": "c478c32c45884c57a62f7b2aa8ddc3b0" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SourceType": 0, + "m_FunctionName": "ComputeSDF44", + "m_FunctionSource": "96de908384869cd409c75efa351d5edf", + "m_FunctionBody": "Enter function body here..." +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "e9e06fcb161e44ba8cc9f6f60264df78", + "m_Id": 2, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "ebbd94a7102a4457a48ac492de3bff14", + "m_Id": 5, + "m_DisplayName": "G", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "G", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "ebd6d75abcb84108bcadbfe7ee5f6244", + "m_Id": 7, + "m_DisplayName": "TextureHeight", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "TextureHeight", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "ec184d6d9fb2494897774c9e7d279e6d", + "m_Group": { + "m_Id": "013228b0fdf1424097798f0973a9a4fb" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4803.0, + "y": -2627.0, + "width": 165.0, + "height": 34.0 + } + }, + "m_Slots": [ + { + "m_Id": "ca2a1083dc014f39ab8af0cdf140866b" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "07946387933e416db576b677f0711e5f" + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.SubtractNode", + "m_ObjectId": "ec1f2e8bc9fd4ae38b133c60ee6c49b8", + "m_Group": { + "m_Id": "42cadae0923e4969b50bbc3f78185934" + }, + "m_Name": "Subtract", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4957.99951171875, + "y": -3204.0, + "width": 130.0, + "height": 118.0 + } + }, + "m_Slots": [ + { + "m_Id": "748c31bbcecc4b30bec2e42c0612175b" + }, + { + "m_Id": "4bda5c294e1949138d033640e1d385b4" + }, + { + "m_Id": "4e64dac49ddc47c3b5b1e27b17a08304" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.Internal.Vector4ShaderProperty", + "m_ObjectId": "ec79eb447dfd47a9b3380344c6a60f43", + "m_Guid": { + "m_GuidSerialized": "54c77f8b-0534-4b35-a3f0-83ab2ebe6c1f" + }, + "m_Name": "_OutlineTex_ST", + "m_DefaultReferenceName": "Vector4_1774DE83", + "m_OverrideReferenceName": "_OutlineTex_ST", + "m_GeneratePropertyBlock": true, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": { + "x": 1.0, + "y": 1.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.GroupData", + "m_ObjectId": "ecf16c34d46f4502ac601f0c38c7576b", + "m_Title": "Vertex Color", + "m_Position": { + "x": -3448.000244140625, + "y": -3579.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "ed1d1f1613334c3bb904dd08161cd7e5", + "m_Id": 0, + "m_DisplayName": "_GradientScale", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "ed6c215a65584deeaefad1d2c7743044", + "m_Id": 4, + "m_DisplayName": "RGBA", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "RGBA", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector3MaterialSlot", + "m_ObjectId": "edbee7a8952b46529ac5ad0365775774", + "m_Id": 5, + "m_DisplayName": "RGB", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "RGB", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.ColorRGBMaterialSlot", + "m_ObjectId": "ef0b93f78372439696f50711eaf57d90", + "m_Id": 0, + "m_DisplayName": "Base Color", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "BaseColor", + "m_StageCapability": 2, + "m_Value": { + "x": 0.7353569269180298, + "y": 0.7353569269180298, + "z": 0.7353569269180298 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [ + "X", + "Y", + "Z" + ], + "m_ColorMode": 0, + "m_DefaultColor": { + "r": 0.5, + "g": 0.5, + "b": 0.5, + "a": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector2MaterialSlot", + "m_ObjectId": "ef9738ec7e894772a14e9dce441c16c6", + "m_Id": 2, + "m_DisplayName": "UV", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "UV", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0 + }, + "m_Labels": [ + "X", + "Y" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.SamplerStateMaterialSlot", + "m_ObjectId": "f01d52cdcb1647aab35782b4af535efd", + "m_Id": 3, + "m_DisplayName": "Sampler", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Sampler", + "m_StageCapability": 3, + "m_BareResource": false +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.CustomFunctionNode", + "m_ObjectId": "f23a8b2b7c85478388ff7a8c8a6de740", + "m_Group": { + "m_Id": "42cadae0923e4969b50bbc3f78185934" + }, + "m_Name": "Layer4 (Custom Function)", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -3849.999755859375, + "y": -3286.0, + "width": 193.0, + "height": 189.99998474121095 + } + }, + "m_Slots": [ + { + "m_Id": "0fac35636fca4474a6afaefc3c757775" + }, + { + "m_Id": "cc88101667c9488f9c5a716e851c1b21" + }, + { + "m_Id": "68ec7c31365549d6a8ce883edfc02de2" + }, + { + "m_Id": "02559cbe5ad441a3904ccb75ded2b2c5" + }, + { + "m_Id": "34a67e0fef884f9399e674d9eeaf720c" + }, + { + "m_Id": "3802c81c3be24823aa1d7c9997a33c29" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SourceType": 0, + "m_FunctionName": "Layer4", + "m_FunctionSource": "96de908384869cd409c75efa351d5edf", + "m_FunctionBody": "Enter function body here..." +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "f2903158b3624759bca1fcd843698078", + "m_Id": 1, + "m_DisplayName": "B", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 3, + "m_Value": { + "x": 2.0, + "y": 2.0, + "z": 2.0, + "w": 2.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicValueMaterialSlot", + "m_ObjectId": "f2a351a5375c441b8d9ab7e2c9545a77", + "m_Id": 1, + "m_DisplayName": "B", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 3, + "m_Value": { + "e00": 2.0, + "e01": 2.0, + "e02": 2.0, + "e03": 2.0, + "e10": 2.0, + "e11": 2.0, + "e12": 2.0, + "e13": 2.0, + "e20": 2.0, + "e21": 2.0, + "e22": 2.0, + "e23": 2.0, + "e30": 2.0, + "e31": 2.0, + "e32": 2.0, + "e33": 2.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Texture2DPropertiesNode", + "m_ObjectId": "f383b24f0bc6434dafe44b3e3d338a63", + "m_Group": { + "m_Id": "d0a791a544614667962a9a9a9ce0c68a" + }, + "m_Name": "Texel Size", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -6012.99951171875, + "y": -3209.0, + "width": 183.99998474121095, + "height": 100.99999237060547 + } + }, + "m_Slots": [ + { + "m_Id": "fb5e1e2a67c14602808358686bb75091" + }, + { + "m_Id": "712da461f71a454db59d349f752d41ee" + }, + { + "m_Id": "b000f852aa984e9dae25b125a4607f4e" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "f3d31c1f18d8491a8ecf5cbc37e4b7db", + "m_Group": { + "m_Id": "42cadae0923e4969b50bbc3f78185934" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4321.99951171875, + "y": -3246.0, + "width": 153.0, + "height": 34.0 + } + }, + "m_Slots": [ + { + "m_Id": "ed1d1f1613334c3bb904dd08161cd7e5" + } + ], + "synonyms": [], + "m_Precision": 1, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "a6bbb32e8d884be9bb36db91fe4b81b1" + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "f42ad06b3c6a45d3ab33de904c063412", + "m_Id": 3, + "m_DisplayName": "A", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "f48f04ad45d046a8b88e71731ed506e7", + "m_Id": 4, + "m_DisplayName": "R", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "R", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BlockNode", + "m_ObjectId": "f4ecc442a2d246759f7c2c0412953d28", + "m_Group": { + "m_Id": "" + }, + "m_Name": "VertexDescription.Normal", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": 0.0, + "y": 0.0, + "width": 0.0, + "height": 0.0 + } + }, + "m_Slots": [ + { + "m_Id": "a3f8b6e8ae7f48e2989a029904401502" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SerializedDescriptor": "VertexDescription.Normal" +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BlockNode", + "m_ObjectId": "f5a8bfcec21a4dac9df63993ec53635e", + "m_Group": { + "m_Id": "" + }, + "m_Name": "SurfaceDescription.NormalTS", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": 0.0, + "y": 0.0, + "width": 0.0, + "height": 0.0 + } + }, + "m_Slots": [ + { + "m_Id": "7564379492aa4c5a927ff3501acdc70d" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SerializedDescriptor": "SurfaceDescription.NormalTS" +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "f6823778a3cf42d5bbe8a83e5f9c9fa3", + "m_Id": 1, + "m_DisplayName": "SD", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "SD", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "f684c5678e9e4f078157a3ab7ef5057b", + "m_Id": 4, + "m_DisplayName": "Isoperimeter", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Isoperimeter", + "m_StageCapability": 3, + "m_Value": { + "x": 3.0, + "y": 2.0, + "z": 1.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.SampleTexture2DNode", + "m_ObjectId": "f814deb543c24fbbafbcdb5071d96022", + "m_Group": { + "m_Id": "42cadae0923e4969b50bbc3f78185934" + }, + "m_Name": "Sample Texture 2D", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4600.0, + "y": -3245.0, + "width": 183.99998474121095, + "height": 253.0 + } + }, + "m_Slots": [ + { + "m_Id": "abd59150589b436cadf8c9e6f43ccb8e" + }, + { + "m_Id": "7acfafd73b8c4dfab8c55c18a887e087" + }, + { + "m_Id": "928621a3ca2d41c89a10336bbbc81ddc" + }, + { + "m_Id": "b7f9ac55517141868bfb9d2ad6429792" + }, + { + "m_Id": "09b1b86c1c074337a4c439d3a308dd2e" + }, + { + "m_Id": "1f247658c7ba45fb93c41f51e21acb0d" + }, + { + "m_Id": "d30452ac6b244ecca03df4d7b4de9f81" + }, + { + "m_Id": "215b30ae27784ec3a13360a9029af283" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_TextureType": 0, + "m_NormalMapSpace": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "f864c900600e427ba7793f00c715e971", + "m_Id": 0, + "m_DisplayName": "Outline Width", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicValueMaterialSlot", + "m_ObjectId": "fa6de3be9f5b4411b5081b49e645f424", + "m_Id": 1, + "m_DisplayName": "B", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 3, + "m_Value": { + "e00": 2.0, + "e01": 2.0, + "e02": 2.0, + "e03": 2.0, + "e10": 2.0, + "e11": 2.0, + "e12": 2.0, + "e13": 2.0, + "e20": 2.0, + "e21": 2.0, + "e22": 2.0, + "e23": 2.0, + "e30": 2.0, + "e31": 2.0, + "e32": 2.0, + "e33": 2.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DivideNode", + "m_ObjectId": "faace8101df943d8956faa31728cb004", + "m_Group": { + "m_Id": "daaf032a109749a88c9b8ff8e1f8b541" + }, + "m_Name": "Divide", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -5254.99951171875, + "y": -3891.0, + "width": 130.0, + "height": 118.0 + } + }, + "m_Slots": [ + { + "m_Id": "77e28f3e930b4c249145630ec961af95" + }, + { + "m_Id": "f2903158b3624759bca1fcd843698078" + }, + { + "m_Id": "30ca940fe2794c949f2a1d4d2caaa446" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "facc84930f544fd7a0205a6176b18ac0", + "m_Id": 2, + "m_DisplayName": "RGBA", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "RGBA", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Texture2DInputMaterialSlot", + "m_ObjectId": "fb15d0ba56d54a6192f11e107aeb5fa8", + "m_Id": 1, + "m_DisplayName": "Texture", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Texture", + "m_StageCapability": 3, + "m_BareResource": false, + "m_Texture": { + "m_SerializedTexture": "{\"texture\":{\"instanceID\":0}}", + "m_Guid": "" + }, + "m_DefaultType": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "fb5e1e2a67c14602808358686bb75091", + "m_Id": 0, + "m_DisplayName": "Width", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Width", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "fc2e62201c5847e798fd939314413fcd", + "m_Id": 4, + "m_DisplayName": "RGBA", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "RGBA", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicValueMaterialSlot", + "m_ObjectId": "fd0b096ed5b74f9e9ec51327be200731", + "m_Id": 2, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "e00": 0.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 0.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 0.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 0.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.SampleTexture2DNode", + "m_ObjectId": "fdb77c3e92ee497b88ca5dc46dc45350", + "m_Group": { + "m_Id": "98934a69591249d5b8b92b39045359a3" + }, + "m_Name": "Sample Texture 2D", + "m_DrawState": { + "m_Expanded": false, + "m_Position": { + "serializedVersion": "2", + "x": -4208.0, + "y": -2371.0, + "width": 180.0, + "height": 180.0 + } + }, + "m_Slots": [ + { + "m_Id": "4328cdbf78b94c038fd614c59bfe1cac" + }, + { + "m_Id": "04dfcc9ff13a4bf282ed46faec39d15c" + }, + { + "m_Id": "71dd947935b64ce38f0d25406dde447b" + }, + { + "m_Id": "61a6ac5f29344d109411f26850ab0a96" + }, + { + "m_Id": "44806230fa384c1e95f9c5918a14f056" + }, + { + "m_Id": "4eb3c00a1ca44e10be833b7ca61ff059" + }, + { + "m_Id": "57abc172afd449e2a4d567f93432507b" + }, + { + "m_Id": "cda5e3b4c1054bf3a65c0b7ec6bc778a" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_TextureType": 0, + "m_NormalMapSpace": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector3MaterialSlot", + "m_ObjectId": "fe11fa80cc1847a5a37f6757d521cf25", + "m_Id": 5, + "m_DisplayName": "RGB", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "RGB", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector2MaterialSlot", + "m_ObjectId": "ffb07af0bca546d8b9bc439d34aa68f5", + "m_Id": 0, + "m_DisplayName": "UV_1", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "UV_1", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0 + }, + "m_Labels": [] +} + diff --git a/Assets/Resources/TextMesh Pro/Shaders/TMP_SDF-HDRP LIT.shadergraph.meta b/Assets/Resources/TextMesh Pro/Shaders/TMP_SDF-HDRP LIT.shadergraph.meta new file mode 100644 index 0000000..a445e27 --- /dev/null +++ b/Assets/Resources/TextMesh Pro/Shaders/TMP_SDF-HDRP LIT.shadergraph.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: ca2ed216f98028c4dae6c5224a952b3c +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: 625f186215c104763be7675aa2d941aa, type: 3} diff --git a/Assets/Resources/TextMesh Pro/Shaders/TMP_SDF-HDRP UNLIT.shadergraph b/Assets/Resources/TextMesh Pro/Shaders/TMP_SDF-HDRP UNLIT.shadergraph new file mode 100644 index 0000000..d42a8aa --- /dev/null +++ b/Assets/Resources/TextMesh Pro/Shaders/TMP_SDF-HDRP UNLIT.shadergraph @@ -0,0 +1,11198 @@ +{ + "m_SGVersion": 2, + "m_Type": "UnityEditor.ShaderGraph.GraphData", + "m_ObjectId": "386c36a1c4c34ea29deb680fb82cfe8b", + "m_Properties": [ + { + "m_Id": "dc75c4e3a1bc4bb0a128086c2b0679a5" + }, + { + "m_Id": "867a4ae13c0d4a028c71bc1063824c14" + }, + { + "m_Id": "22b7f3c2bb7b48c0a7fdeb50e33e7d5e" + }, + { + "m_Id": "53073e5ea924459fa6681a4943e9f947" + }, + { + "m_Id": "7a046f410ce64aa88438b0bfd412c045" + }, + { + "m_Id": "636180f6e0504f2baaa5cc086980cb47" + }, + { + "m_Id": "74b41464cbed4e9e8e23af5ab9be40cf" + }, + { + "m_Id": "8ed907a2cc7949b68a283ae243ea1977" + }, + { + "m_Id": "cb3c0c3f08654b068bea44c4ffb15f4a" + }, + { + "m_Id": "0580d4b7e3a049049569f4508643a724" + }, + { + "m_Id": "c9ec735d1a1046769e5601b2c97c849a" + }, + { + "m_Id": "2d0a269511e34bd1ba9056d2c939dff2" + }, + { + "m_Id": "07946387933e416db576b677f0711e5f" + }, + { + "m_Id": "46fbf3eeb0ea4470869cba7443249295" + }, + { + "m_Id": "ec79eb447dfd47a9b3380344c6a60f43" + }, + { + "m_Id": "3fdf4b7bc5d4426492dcc057603ef4a6" + }, + { + "m_Id": "8cf8aae64c1d443f9303126886b40f17" + }, + { + "m_Id": "49e7c3ad55ce458797f0e60c950cb965" + }, + { + "m_Id": "81e8ed0534534674a74263e6161a2a1a" + }, + { + "m_Id": "952d0fa5cd744df0b434cd38e9a90b93" + }, + { + "m_Id": "21a7a380e66d42e780e2a2a1baa630d5" + }, + { + "m_Id": "2c10b97b92c947ceb307a93759c0228b" + }, + { + "m_Id": "1be90d4f96a841748b0c95219b12ad27" + }, + { + "m_Id": "5fbe253f3e444f2aa8ac717f9c856619" + }, + { + "m_Id": "5bd258837c514ff7ab0bf7027e762c18" + }, + { + "m_Id": "998db5e5901e45b29040eb2099370071" + }, + { + "m_Id": "a6c38edd2e8743a9b057ba8452b9f129" + }, + { + "m_Id": "82af2db1018543d7832af96c1cfc981f" + }, + { + "m_Id": "3ec4797e381747829ef4712c85fcf7a1" + }, + { + "m_Id": "b0b352c4503a43d083a64e57352b29a0" + }, + { + "m_Id": "424dbeeb009344efa29c304c4979e3d6" + }, + { + "m_Id": "05805bc6fcc941fd889922555c6c86d7" + }, + { + "m_Id": "a4ad98d8828c424384229c344ebe2ed0" + }, + { + "m_Id": "3e372195f4bd4845852a37839e5b602d" + }, + { + "m_Id": "a6bbb32e8d884be9bb36db91fe4b81b1" + } + ], + "m_Keywords": [], + "m_Nodes": [ + { + "m_Id": "b1188549725543d485436c2e921ffbb2" + }, + { + "m_Id": "4488af8ff6a7421298a7e827f567263b" + }, + { + "m_Id": "7e0fadb2533f496192c1ad3e78642010" + }, + { + "m_Id": "aa87c72ac0e64469acc34f936f00b3d0" + }, + { + "m_Id": "105b1ed1aa714e41bbe1ef5472bdb11f" + }, + { + "m_Id": "150533bad8e2424aaa2c74e253af8592" + }, + { + "m_Id": "1c4df61c2fea404eb3b87b270d7c59bc" + }, + { + "m_Id": "8135ca333f8f4ea78163743e6ec1f55c" + }, + { + "m_Id": "36f1b4d96f2941c39e5cd95d9c1d2ce6" + }, + { + "m_Id": "9c228fac287d446296b91a4acf5cec59" + }, + { + "m_Id": "52798bdb86f6400e86489a7a368e9f8b" + }, + { + "m_Id": "f383b24f0bc6434dafe44b3e3d338a63" + }, + { + "m_Id": "85a1ad8e741e41759002e8cdc8cd0b96" + }, + { + "m_Id": "f3d31c1f18d8491a8ecf5cbc37e4b7db" + }, + { + "m_Id": "f23a8b2b7c85478388ff7a8c8a6de740" + }, + { + "m_Id": "e818605f8f5a4f01bf61caaa33693581" + }, + { + "m_Id": "85b5940eb77e4625812ded7215bab8d7" + }, + { + "m_Id": "cdddee3a537c464697357f11b966f9b8" + }, + { + "m_Id": "88253223d2c34ecfab92b0c344048f94" + }, + { + "m_Id": "c7ddee91dc5b48dc828309c77fdb0b88" + }, + { + "m_Id": "1e12726617b24675958e942eb62e4b09" + }, + { + "m_Id": "2ac79705aa9e415dbb74ec215233fd1b" + }, + { + "m_Id": "44317f2e371447e2a8d894f8a021a235" + }, + { + "m_Id": "7984fd094e1147bdabb4e26fbd3d31c8" + }, + { + "m_Id": "91890fe48ebe4717aea61ecaf3ad4861" + }, + { + "m_Id": "19075add867e4757b9520d18fe8de1d0" + }, + { + "m_Id": "fdb77c3e92ee497b88ca5dc46dc45350" + }, + { + "m_Id": "c234e5216678436195ee1a5914bc79da" + }, + { + "m_Id": "4648b46ad29a4008a80de4f8a5a5b813" + }, + { + "m_Id": "59bd90a849624124bae6464ee3669aa6" + }, + { + "m_Id": "a535f3bcbeb14622bb177eb6f46e76f4" + }, + { + "m_Id": "9e87ce9607e14015a3790c528ca5dfda" + }, + { + "m_Id": "285f6a9863d54ed2a8150727ad749456" + }, + { + "m_Id": "b163c9f1666644b0bba62cf0e12df7bc" + }, + { + "m_Id": "a455bd79094c4413a7b7dd80ca8b9368" + }, + { + "m_Id": "dbcb748279484a4590e53518c49122b8" + }, + { + "m_Id": "04dc152dd2ba4d519391577eb1156235" + }, + { + "m_Id": "9f0de188085746d5a19073da1de85ddb" + }, + { + "m_Id": "ec184d6d9fb2494897774c9e7d279e6d" + }, + { + "m_Id": "95928bcb6a284b8d88105a84c2e1d3ce" + }, + { + "m_Id": "4f194ff591484e908fc2bcdacbcf2570" + }, + { + "m_Id": "6e8946a245e842b38231d4a241bfb3ef" + }, + { + "m_Id": "cb7117ecb1d047a8b2cb00ed552cb181" + }, + { + "m_Id": "3c50439118b2496f9e390021b0964606" + }, + { + "m_Id": "3e231021af7b47ba97f2871e7f25d0fe" + }, + { + "m_Id": "aa3e347d733e48f7b65d8a8847370eec" + }, + { + "m_Id": "2a552a0b828f457c911aa19561e410ae" + }, + { + "m_Id": "acd0cd5a177f4a97bf23db7219305e3f" + }, + { + "m_Id": "51378bae98a94c309785d14cd5cbb453" + }, + { + "m_Id": "9e6e50a71d9843b49b62ebe1cf7d3d59" + }, + { + "m_Id": "7444469eb9884253819add9ef96baa25" + }, + { + "m_Id": "67a519f507384ff1861df5d8d5b486be" + }, + { + "m_Id": "48390d02257d41bf98eace1deaa4c539" + }, + { + "m_Id": "f4ecc442a2d246759f7c2c0412953d28" + }, + { + "m_Id": "7f2e6b5f15364ed9835d67d0cf4f8f65" + }, + { + "m_Id": "aca823a8188948c782eddaf0f45e1868" + }, + { + "m_Id": "7d78a616c2754cc28d1f32cf66ade611" + }, + { + "m_Id": "163beb4431c34f538340bc0af0991e6f" + }, + { + "m_Id": "39f2f84f30304d859fb07569e2695f60" + }, + { + "m_Id": "42a586e4f6ec40eeaba891b7fd133864" + }, + { + "m_Id": "4abff6ff92fa4a05b203f10580988335" + }, + { + "m_Id": "319916a5921343f7b7eef0e50dc93def" + }, + { + "m_Id": "f814deb543c24fbbafbcdb5071d96022" + }, + { + "m_Id": "65c8e64a7535466e933eed08a2f77532" + }, + { + "m_Id": "63c7cd57fc3c45a9a97b514fdae32693" + }, + { + "m_Id": "d4df208fc23b42f2b52364124f1b661c" + }, + { + "m_Id": "9d3c3383d5934a17bf9efbb7fd9e9043" + }, + { + "m_Id": "aef5c44f84e04c3185e0b93e95e34204" + }, + { + "m_Id": "c9d7f0dbae7d422985a1cc87c025e76b" + }, + { + "m_Id": "faace8101df943d8956faa31728cb004" + }, + { + "m_Id": "007c75c776ac4f1babe9cd7ae1fc4f14" + }, + { + "m_Id": "b571db753a1948d5a6f1de4e7d0c7238" + }, + { + "m_Id": "9147636b0cfa466a9b37a013d8f693bf" + }, + { + "m_Id": "bc9afcb18afa4ccc82d2cdc34d3f4641" + }, + { + "m_Id": "b4a40cb6acd441acb83cfe0240bf910d" + }, + { + "m_Id": "56c25395796e4d2fbe5c892d428d1620" + }, + { + "m_Id": "6b2f65c1463f4f7bad16c54a95d2fe75" + }, + { + "m_Id": "109f638d1f9b49d4991d6d21a86d4eb7" + }, + { + "m_Id": "dff7a66b353a4023b29c9d937da77960" + }, + { + "m_Id": "7a80e8839f0e4a1d9a6c0814f8793ee6" + }, + { + "m_Id": "7d7696aa6d184b4fb9c316a9dec37aee" + }, + { + "m_Id": "ec1f2e8bc9fd4ae38b133c60ee6c49b8" + }, + { + "m_Id": "2db15d90c2204143b225ec4ef08d0755" + }, + { + "m_Id": "e591df3a1eb94e259b762f2830b407e2" + } + ], + "m_GroupDatas": [ + { + "m_Id": "484b51c50485473b819c4f05087b32d7" + }, + { + "m_Id": "d0a791a544614667962a9a9a9ce0c68a" + }, + { + "m_Id": "42cadae0923e4969b50bbc3f78185934" + }, + { + "m_Id": "ecf16c34d46f4502ac601f0c38c7576b" + }, + { + "m_Id": "98934a69591249d5b8b92b39045359a3" + }, + { + "m_Id": "013228b0fdf1424097798f0973a9a4fb" + }, + { + "m_Id": "d258902c6ec74942afdb9ebf8c1d07f8" + }, + { + "m_Id": "daaf032a109749a88c9b8ff8e1f8b541" + } + ], + "m_StickyNoteDatas": [], + "m_Edges": [ + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "007c75c776ac4f1babe9cd7ae1fc4f14" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "b571db753a1948d5a6f1de4e7d0c7238" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "04dc152dd2ba4d519391577eb1156235" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "b163c9f1666644b0bba62cf0e12df7bc" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "105b1ed1aa714e41bbe1ef5472bdb11f" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "b4a40cb6acd441acb83cfe0240bf910d" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "109f638d1f9b49d4991d6d21a86d4eb7" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "ec1f2e8bc9fd4ae38b133c60ee6c49b8" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "150533bad8e2424aaa2c74e253af8592" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "319916a5921343f7b7eef0e50dc93def" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "150533bad8e2424aaa2c74e253af8592" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "65c8e64a7535466e933eed08a2f77532" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "150533bad8e2424aaa2c74e253af8592" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "9c228fac287d446296b91a4acf5cec59" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "150533bad8e2424aaa2c74e253af8592" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "f814deb543c24fbbafbcdb5071d96022" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "163beb4431c34f538340bc0af0991e6f" + }, + "m_SlotId": 4 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "7984fd094e1147bdabb4e26fbd3d31c8" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "19075add867e4757b9520d18fe8de1d0" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "e818605f8f5a4f01bf61caaa33693581" + }, + "m_SlotId": 5 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "1c4df61c2fea404eb3b87b270d7c59bc" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "e818605f8f5a4f01bf61caaa33693581" + }, + "m_SlotId": 4 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "1e12726617b24675958e942eb62e4b09" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "dff7a66b353a4023b29c9d937da77960" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "285f6a9863d54ed2a8150727ad749456" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "59bd90a849624124bae6464ee3669aa6" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "2a552a0b828f457c911aa19561e410ae" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "51378bae98a94c309785d14cd5cbb453" + }, + "m_SlotId": 6 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "2ac79705aa9e415dbb74ec215233fd1b" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "7984fd094e1147bdabb4e26fbd3d31c8" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "2db15d90c2204143b225ec4ef08d0755" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "fdb77c3e92ee497b88ca5dc46dc45350" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "319916a5921343f7b7eef0e50dc93def" + }, + "m_SlotId": 7 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "4abff6ff92fa4a05b203f10580988335" + }, + "m_SlotId": 2 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "36f1b4d96f2941c39e5cd95d9c1d2ce6" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "85a1ad8e741e41759002e8cdc8cd0b96" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "39f2f84f30304d859fb07569e2695f60" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "163beb4431c34f538340bc0af0991e6f" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "3e231021af7b47ba97f2871e7f25d0fe" + }, + "m_SlotId": 5 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "6e8946a245e842b38231d4a241bfb3ef" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "42a586e4f6ec40eeaba891b7fd133864" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "cdddee3a537c464697357f11b966f9b8" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "44317f2e371447e2a8d894f8a021a235" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "2ac79705aa9e415dbb74ec215233fd1b" + }, + "m_SlotId": 3 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "4488af8ff6a7421298a7e827f567263b" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "44317f2e371447e2a8d894f8a021a235" + }, + "m_SlotId": 3 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "4648b46ad29a4008a80de4f8a5a5b813" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "c234e5216678436195ee1a5914bc79da" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "4abff6ff92fa4a05b203f10580988335" + }, + "m_SlotId": 4 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "e818605f8f5a4f01bf61caaa33693581" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "4f194ff591484e908fc2bcdacbcf2570" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "9f0de188085746d5a19073da1de85ddb" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "51378bae98a94c309785d14cd5cbb453" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "aa3e347d733e48f7b65d8a8847370eec" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "51378bae98a94c309785d14cd5cbb453" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "aca823a8188948c782eddaf0f45e1868" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "52798bdb86f6400e86489a7a368e9f8b" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "f383b24f0bc6434dafe44b3e3d338a63" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "56c25395796e4d2fbe5c892d428d1620" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "7a80e8839f0e4a1d9a6c0814f8793ee6" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "59bd90a849624124bae6464ee3669aa6" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "f23a8b2b7c85478388ff7a8c8a6de740" + }, + "m_SlotId": 4 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "63c7cd57fc3c45a9a97b514fdae32693" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "56c25395796e4d2fbe5c892d428d1620" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "65c8e64a7535466e933eed08a2f77532" + }, + "m_SlotId": 7 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "4abff6ff92fa4a05b203f10580988335" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "67a519f507384ff1861df5d8d5b486be" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "51378bae98a94c309785d14cd5cbb453" + }, + "m_SlotId": 4 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "6b2f65c1463f4f7bad16c54a95d2fe75" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "7d7696aa6d184b4fb9c316a9dec37aee" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "7444469eb9884253819add9ef96baa25" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "51378bae98a94c309785d14cd5cbb453" + }, + "m_SlotId": 2 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "7984fd094e1147bdabb4e26fbd3d31c8" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "91890fe48ebe4717aea61ecaf3ad4861" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "7a80e8839f0e4a1d9a6c0814f8793ee6" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "65c8e64a7535466e933eed08a2f77532" + }, + "m_SlotId": 2 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "7d7696aa6d184b4fb9c316a9dec37aee" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "319916a5921343f7b7eef0e50dc93def" + }, + "m_SlotId": 2 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "7d78a616c2754cc28d1f32cf66ade611" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "f23a8b2b7c85478388ff7a8c8a6de740" + }, + "m_SlotId": 3 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "7e0fadb2533f496192c1ad3e78642010" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "88253223d2c34ecfab92b0c344048f94" + }, + "m_SlotId": 5 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "8135ca333f8f4ea78163743e6ec1f55c" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "f23a8b2b7c85478388ff7a8c8a6de740" + }, + "m_SlotId": 5 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "85a1ad8e741e41759002e8cdc8cd0b96" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "88253223d2c34ecfab92b0c344048f94" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "85a1ad8e741e41759002e8cdc8cd0b96" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "e818605f8f5a4f01bf61caaa33693581" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "85b5940eb77e4625812ded7215bab8d7" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "f23a8b2b7c85478388ff7a8c8a6de740" + }, + "m_SlotId": 6 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "88253223d2c34ecfab92b0c344048f94" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "44317f2e371447e2a8d894f8a021a235" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "9147636b0cfa466a9b37a013d8f693bf" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "faace8101df943d8956faa31728cb004" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "91890fe48ebe4717aea61ecaf3ad4861" + }, + "m_SlotId": 1 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "3e231021af7b47ba97f2871e7f25d0fe" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "91890fe48ebe4717aea61ecaf3ad4861" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "3e231021af7b47ba97f2871e7f25d0fe" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "91890fe48ebe4717aea61ecaf3ad4861" + }, + "m_SlotId": 3 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "3e231021af7b47ba97f2871e7f25d0fe" + }, + "m_SlotId": 2 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "91890fe48ebe4717aea61ecaf3ad4861" + }, + "m_SlotId": 4 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "cb7117ecb1d047a8b2cb00ed552cb181" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "95928bcb6a284b8d88105a84c2e1d3ce" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "a455bd79094c4413a7b7dd80ca8b9368" + }, + "m_SlotId": 4 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "9c228fac287d446296b91a4acf5cec59" + }, + "m_SlotId": 7 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "4abff6ff92fa4a05b203f10580988335" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "9d3c3383d5934a17bf9efbb7fd9e9043" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "7a80e8839f0e4a1d9a6c0814f8793ee6" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "9d3c3383d5934a17bf9efbb7fd9e9043" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "7d7696aa6d184b4fb9c316a9dec37aee" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "9d3c3383d5934a17bf9efbb7fd9e9043" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "ec1f2e8bc9fd4ae38b133c60ee6c49b8" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "9e6e50a71d9843b49b62ebe1cf7d3d59" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "acd0cd5a177f4a97bf23db7219305e3f" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "9e87ce9607e14015a3790c528ca5dfda" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "c234e5216678436195ee1a5914bc79da" + }, + "m_SlotId": 4 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "9f0de188085746d5a19073da1de85ddb" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "7d78a616c2754cc28d1f32cf66ade611" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "a455bd79094c4413a7b7dd80ca8b9368" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "b163c9f1666644b0bba62cf0e12df7bc" + }, + "m_SlotId": 2 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "a535f3bcbeb14622bb177eb6f46e76f4" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "c234e5216678436195ee1a5914bc79da" + }, + "m_SlotId": 3 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "aa3e347d733e48f7b65d8a8847370eec" + }, + "m_SlotId": 1 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "2ac79705aa9e415dbb74ec215233fd1b" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "aa87c72ac0e64469acc34f936f00b3d0" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "88253223d2c34ecfab92b0c344048f94" + }, + "m_SlotId": 4 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "acd0cd5a177f4a97bf23db7219305e3f" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "51378bae98a94c309785d14cd5cbb453" + }, + "m_SlotId": 5 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "acd0cd5a177f4a97bf23db7219305e3f" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "51378bae98a94c309785d14cd5cbb453" + }, + "m_SlotId": 7 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "aef5c44f84e04c3185e0b93e95e34204" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "109f638d1f9b49d4991d6d21a86d4eb7" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "b1188549725543d485436c2e921ffbb2" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "7d78a616c2754cc28d1f32cf66ade611" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "b163c9f1666644b0bba62cf0e12df7bc" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "9f0de188085746d5a19073da1de85ddb" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "b4a40cb6acd441acb83cfe0240bf910d" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "dff7a66b353a4023b29c9d937da77960" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "b571db753a1948d5a6f1de4e7d0c7238" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "bc9afcb18afa4ccc82d2cdc34d3f4641" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "b571db753a1948d5a6f1de4e7d0c7238" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "bc9afcb18afa4ccc82d2cdc34d3f4641" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "bc9afcb18afa4ccc82d2cdc34d3f4641" + }, + "m_SlotId": 6 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "faace8101df943d8956faa31728cb004" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "c234e5216678436195ee1a5914bc79da" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "fdb77c3e92ee497b88ca5dc46dc45350" + }, + "m_SlotId": 2 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "c7ddee91dc5b48dc828309c77fdb0b88" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "88253223d2c34ecfab92b0c344048f94" + }, + "m_SlotId": 3 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "c9d7f0dbae7d422985a1cc87c025e76b" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "e818605f8f5a4f01bf61caaa33693581" + }, + "m_SlotId": 6 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "cdddee3a537c464697357f11b966f9b8" + }, + "m_SlotId": 7 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "88253223d2c34ecfab92b0c344048f94" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "d4df208fc23b42f2b52364124f1b661c" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "6b2f65c1463f4f7bad16c54a95d2fe75" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "dbcb748279484a4590e53518c49122b8" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "a455bd79094c4413a7b7dd80ca8b9368" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "dff7a66b353a4023b29c9d937da77960" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "cdddee3a537c464697357f11b966f9b8" + }, + "m_SlotId": 2 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "e818605f8f5a4f01bf61caaa33693581" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "f23a8b2b7c85478388ff7a8c8a6de740" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "ec184d6d9fb2494897774c9e7d279e6d" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "a455bd79094c4413a7b7dd80ca8b9368" + }, + "m_SlotId": 3 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "ec1f2e8bc9fd4ae38b133c60ee6c49b8" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "f814deb543c24fbbafbcdb5071d96022" + }, + "m_SlotId": 2 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "f23a8b2b7c85478388ff7a8c8a6de740" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "aa3e347d733e48f7b65d8a8847370eec" + }, + "m_SlotId": 2 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "f383b24f0bc6434dafe44b3e3d338a63" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "85a1ad8e741e41759002e8cdc8cd0b96" + }, + "m_SlotId": 3 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "f3d31c1f18d8491a8ecf5cbc37e4b7db" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "e818605f8f5a4f01bf61caaa33693581" + }, + "m_SlotId": 3 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "f814deb543c24fbbafbcdb5071d96022" + }, + "m_SlotId": 7 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "4abff6ff92fa4a05b203f10580988335" + }, + "m_SlotId": 3 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "faace8101df943d8956faa31728cb004" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "109f638d1f9b49d4991d6d21a86d4eb7" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "faace8101df943d8956faa31728cb004" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "56c25395796e4d2fbe5c892d428d1620" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "faace8101df943d8956faa31728cb004" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "6b2f65c1463f4f7bad16c54a95d2fe75" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "faace8101df943d8956faa31728cb004" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "b4a40cb6acd441acb83cfe0240bf910d" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "fdb77c3e92ee497b88ca5dc46dc45350" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "59bd90a849624124bae6464ee3669aa6" + }, + "m_SlotId": 1 + } + } + ], + "m_VertexContext": { + "m_Position": { + "x": -2506.000244140625, + "y": -3749.0 + }, + "m_Blocks": [ + { + "m_Id": "48390d02257d41bf98eace1deaa4c539" + }, + { + "m_Id": "f4ecc442a2d246759f7c2c0412953d28" + }, + { + "m_Id": "7f2e6b5f15364ed9835d67d0cf4f8f65" + } + ] + }, + "m_FragmentContext": { + "m_Position": { + "x": -2506.000244140625, + "y": -3480.0 + }, + "m_Blocks": [ + { + "m_Id": "aca823a8188948c782eddaf0f45e1868" + }, + { + "m_Id": "6e8946a245e842b38231d4a241bfb3ef" + }, + { + "m_Id": "cb7117ecb1d047a8b2cb00ed552cb181" + }, + { + "m_Id": "3c50439118b2496f9e390021b0964606" + }, + { + "m_Id": "e591df3a1eb94e259b762f2830b407e2" + } + ] + }, + "m_PreviewData": { + "serializedMesh": { + "m_SerializedMesh": "{\"mesh\":{\"fileID\":10210,\"guid\":\"0000000000000000e000000000000000\",\"type\":0}}", + "m_Guid": "" + } + }, + "m_Path": "TextMeshPro/SRP", + "m_ConcretePrecision": 0, + "m_PreviewMode": 2, + "m_OutputNode": { + "m_Id": "" + }, + "m_ActiveTargets": [ + { + "m_Id": "7cf0e63037a74dc2a9f591225c678ff4" + } + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "007c75c776ac4f1babe9cd7ae1fc4f14", + "m_Group": { + "m_Id": "daaf032a109749a88c9b8ff8e1f8b541" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -5722.99951171875, + "y": -3827.0, + "width": 134.0, + "height": 34.0 + } + }, + "m_Slots": [ + { + "m_Id": "1356dc7cbdfa4199a6535d3bbf4cd536" + } + ], + "synonyms": [], + "m_Precision": 1, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "3e372195f4bd4845852a37839e5b602d" + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.Rendering.HighDefinition.ShaderGraph.BuiltinData", + "m_ObjectId": "00996039d61e400a9e854ce591ac35a0", + "m_Distortion": false, + "m_DistortionMode": 0, + "m_DistortionDepthTest": true, + "m_AddPrecomputedVelocity": false, + "m_TransparentWritesMotionVec": false, + "m_AlphaToMask": false, + "m_DepthOffset": false, + "m_TransparencyFog": true, + "m_AlphaTestShadow": false, + "m_BackThenFrontRendering": false, + "m_TransparentDepthPrepass": false, + "m_TransparentDepthPostpass": false, + "m_SupportLodCrossFade": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.GroupData", + "m_ObjectId": "013228b0fdf1424097798f0973a9a4fb", + "m_Title": "Face Texture", + "m_Position": { + "x": -4824.0, + "y": -2949.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "02559cbe5ad441a3904ccb75ded2b2c5", + "m_Id": 5, + "m_DisplayName": "Color2", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Color2", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "03182b3263304258b265266325c21f65", + "m_Id": 0, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "045c4f6b050549c7a0efb208e6349779", + "m_Id": 7, + "m_DisplayName": "A", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "04dc152dd2ba4d519391577eb1156235", + "m_Group": { + "m_Id": "013228b0fdf1424097798f0973a9a4fb" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4534.0, + "y": -2747.0, + "width": 150.99998474121095, + "height": 34.0 + } + }, + "m_Slots": [ + { + "m_Id": "3d04f5ba6e7b40d281f22eb424145acd" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "c9ec735d1a1046769e5601b2c97c849a" + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "04dfcc9ff13a4bf282ed46faec39d15c", + "m_Id": 4, + "m_DisplayName": "R", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "R", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.Internal.Vector1ShaderProperty", + "m_ObjectId": "05805bc6fcc941fd889922555c6c86d7", + "m_Guid": { + "m_GuidSerialized": "fe84e680-4cee-4ca5-be86-2e293a9ba093" + }, + "m_Name": "Ambient Shadow", + "m_DefaultReferenceName": "Vector1_05805bc6fcc941fd889922555c6c86d7", + "m_OverrideReferenceName": "_Ambient", + "m_GeneratePropertyBlock": true, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": 0.30000001192092898, + "m_FloatType": 1, + "m_RangeValues": { + "x": 0.0, + "y": 1.0 + } +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.Internal.Vector4ShaderProperty", + "m_ObjectId": "0580d4b7e3a049049569f4508643a724", + "m_Guid": { + "m_GuidSerialized": "eefb88c5-7665-45dc-b3c2-7cf98b9990d6" + }, + "m_Name": "Softness", + "m_DefaultReferenceName": "Vector4_D64EC33D", + "m_OverrideReferenceName": "_Softness", + "m_GeneratePropertyBlock": true, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicValueMaterialSlot", + "m_ObjectId": "068ae649e00b40e198ec5a30ad741fab", + "m_Id": 2, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "e00": 0.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 0.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 0.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 0.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "0699eea947fc426cbfeb8744cf120222", + "m_Id": 1, + "m_DisplayName": "Color", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Color", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.Internal.Vector4ShaderProperty", + "m_ObjectId": "07946387933e416db576b677f0711e5f", + "m_Guid": { + "m_GuidSerialized": "21d612fb-8153-41f8-9e2f-9de044c19fbf" + }, + "m_Name": "_FaceTex_ST", + "m_DefaultReferenceName": "Vector4_1A08AD4A", + "m_OverrideReferenceName": "_FaceTex_ST", + "m_GeneratePropertyBlock": true, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": { + "x": 1.0, + "y": 1.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicValueMaterialSlot", + "m_ObjectId": "082e9706dffc4c188270980d4e44ce0f", + "m_Id": 0, + "m_DisplayName": "A", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 3, + "m_Value": { + "e00": 0.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 0.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 0.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 0.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "0848ba750e0341198cf0bbd413e0efe4", + "m_Id": 0, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "09b1b86c1c074337a4c439d3a308dd2e", + "m_Id": 7, + "m_DisplayName": "A", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "0a67ca5280214bd794dc0ad66b5710a9", + "m_Id": 4, + "m_DisplayName": "R", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "R", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "0b57f2d35157477ab2b29a5aac14ae8b", + "m_Id": 1, + "m_DisplayName": "B", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 3, + "m_Value": { + "x": 1.0, + "y": 1.0, + "z": 1.0, + "w": 1.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "0ba4932e164847878ddb7b7bcff96985", + "m_Id": 1, + "m_DisplayName": "B", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 3, + "m_Value": { + "x": 1.0, + "y": 1.0, + "z": 1.0, + "w": 1.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "0c4dc51f26484c26ad88a3fe4002abcd", + "m_Id": 2, + "m_DisplayName": "Color (1)", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Color", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicValueMaterialSlot", + "m_ObjectId": "0d6a57754b824f6db9cefa6953bc06a9", + "m_Id": 1, + "m_DisplayName": "B", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 3, + "m_Value": { + "e00": 2.0, + "e01": 2.0, + "e02": 2.0, + "e03": 2.0, + "e10": 2.0, + "e11": 2.0, + "e12": 2.0, + "e13": 2.0, + "e20": 2.0, + "e21": 2.0, + "e22": 2.0, + "e23": 2.0, + "e30": 2.0, + "e31": 2.0, + "e32": 2.0, + "e33": 2.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "0d7878dd226d4cfb81a991dc312309fc", + "m_Id": 0, + "m_DisplayName": "Underlay Dilate", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector2MaterialSlot", + "m_ObjectId": "0f7ffb6d2de4447f9736780cbcee8e07", + "m_Id": 4, + "m_DisplayName": "AnimSpeed", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "AnimSpeed", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0 + }, + "m_Labels": [ + "X", + "Y" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "0fac35636fca4474a6afaefc3c757775", + "m_Id": 1, + "m_DisplayName": "Alpha", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Alpha", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "105b1ed1aa714e41bbe1ef5472bdb11f", + "m_Group": { + "m_Id": "484b51c50485473b819c4f05087b32d7" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4923.99951171875, + "y": -4233.0, + "width": 158.99998474121095, + "height": 34.0 + } + }, + "m_Slots": [ + { + "m_Id": "8a08179f99d649d289b8053d5fa0ad22" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "49e7c3ad55ce458797f0e60c950cb965" + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.MultiplyNode", + "m_ObjectId": "109f638d1f9b49d4991d6d21a86d4eb7", + "m_Group": { + "m_Id": "42cadae0923e4969b50bbc3f78185934" + }, + "m_Name": "Multiply", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -5098.99951171875, + "y": -3182.0, + "width": 130.0, + "height": 118.0 + } + }, + "m_Slots": [ + { + "m_Id": "880bb02c6c6b49b18aa6ebc66dc566a0" + }, + { + "m_Id": "1b9cd8f5f4004e2eaf8afbaab803bc04" + }, + { + "m_Id": "b224a1cf80604103ad085c799995f3c2" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "10a99c07aad742349d258db16838c129", + "m_Id": 1, + "m_DisplayName": "Alpha", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Alpha", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Texture2DInputMaterialSlot", + "m_ObjectId": "1196ae398cc348349ab0c1a23fdab4bd", + "m_Id": 1, + "m_DisplayName": "Texture", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Texture", + "m_StageCapability": 3, + "m_BareResource": false, + "m_Texture": { + "m_SerializedTexture": "{\"texture\":{\"instanceID\":0}}", + "m_Guid": "" + }, + "m_DefaultType": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Texture2DMaterialSlot", + "m_ObjectId": "1356dc7cbdfa4199a6535d3bbf4cd536", + "m_Id": 0, + "m_DisplayName": "_MainTex", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_BareResource": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "14ad19bf20a140dd88d58452d7df688b", + "m_Id": 5, + "m_DisplayName": "Softness", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Softness", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 1.0, + "z": 1.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "150533bad8e2424aaa2c74e253af8592", + "m_Group": { + "m_Id": "42cadae0923e4969b50bbc3f78185934" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4955.0, + "y": -3487.0, + "width": 134.0, + "height": 34.0 + } + }, + "m_Slots": [ + { + "m_Id": "72fb5a0d7796446b9e2b929cb32facdc" + } + ], + "synonyms": [], + "m_Precision": 1, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "3e372195f4bd4845852a37839e5b602d" + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.SplitNode", + "m_ObjectId": "163beb4431c34f538340bc0af0991e6f", + "m_Group": { + "m_Id": "ecf16c34d46f4502ac601f0c38c7576b" + }, + "m_Name": "Split", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -3284.0, + "y": -3516.0, + "width": 119.99999237060547, + "height": 149.0 + } + }, + "m_Slots": [ + { + "m_Id": "4c334de01ecd429baa7652fc6002536b" + }, + { + "m_Id": "e2d28f29bbac4983a401574480b5ca28" + }, + { + "m_Id": "6a7af6143e114a538663e71f56731a21" + }, + { + "m_Id": "3e25be96bb3747738c238cf3a741d5df" + }, + { + "m_Id": "4907352322c644ebacdf2ca30f2994fd" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "19075add867e4757b9520d18fe8de1d0", + "m_Group": { + "m_Id": "42cadae0923e4969b50bbc3f78185934" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4291.99951171875, + "y": -3197.0, + "width": 124.0, + "height": 34.0 + } + }, + "m_Slots": [ + { + "m_Id": "4c28ee9109014fa086e5de7a3993341d" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "0580d4b7e3a049049569f4508643a724" + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicValueMaterialSlot", + "m_ObjectId": "1b9cd8f5f4004e2eaf8afbaab803bc04", + "m_Id": 1, + "m_DisplayName": "B", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 3, + "m_Value": { + "e00": 2.0, + "e01": 2.0, + "e02": 2.0, + "e03": 2.0, + "e10": 2.0, + "e11": 2.0, + "e12": 2.0, + "e13": 2.0, + "e20": 2.0, + "e21": 2.0, + "e22": 2.0, + "e23": 2.0, + "e30": 2.0, + "e31": 2.0, + "e32": 2.0, + "e33": 2.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Texture2DInputMaterialSlot", + "m_ObjectId": "1bdde3efd3b7464b8934c555be0f8a48", + "m_Id": 1, + "m_DisplayName": "Texture", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Texture", + "m_StageCapability": 3, + "m_BareResource": false, + "m_Texture": { + "m_SerializedTexture": "{\"texture\":{\"instanceID\":0}}", + "m_Guid": "" + }, + "m_DefaultType": 0 +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.Internal.Vector1ShaderProperty", + "m_ObjectId": "1be90d4f96a841748b0c95219b12ad27", + "m_Guid": { + "m_GuidSerialized": "4c91c146-43bb-4de8-948a-fbf8b1da10e1" + }, + "m_Name": "Bevel Offset", + "m_DefaultReferenceName": "Vector1_97690701", + "m_OverrideReferenceName": "_BevelOffset", + "m_GeneratePropertyBlock": true, + "m_Precision": 1, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": 0.0, + "m_FloatType": 1, + "m_RangeValues": { + "x": -0.5, + "y": 0.5 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "1c4df61c2fea404eb3b87b270d7c59bc", + "m_Group": { + "m_Id": "42cadae0923e4969b50bbc3f78185934" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4311.0, + "y": -3221.0, + "width": 148.0, + "height": 34.0 + } + }, + "m_Slots": [ + { + "m_Id": "f864c900600e427ba7793f00c715e971" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "867a4ae13c0d4a028c71bc1063824c14" + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicValueMaterialSlot", + "m_ObjectId": "1d35fa1fb5004f96a65ace54fbe4f1ad", + "m_Id": 0, + "m_DisplayName": "A", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 3, + "m_Value": { + "e00": 0.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 0.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 0.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 0.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "1db37082bf844442804487b4944352de", + "m_Id": 4, + "m_DisplayName": "R", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "R", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Texture2DMaterialSlot", + "m_ObjectId": "1df58cfa4dad4c449d01ee1c5ea05f2e", + "m_Id": 0, + "m_DisplayName": "_MainTex", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_BareResource": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.UVNode", + "m_ObjectId": "1e12726617b24675958e942eb62e4b09", + "m_Group": { + "m_Id": "484b51c50485473b819c4f05087b32d7" + }, + "m_Name": "UV", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4772.0, + "y": -4404.0, + "width": 145.00001525878907, + "height": 130.0 + } + }, + "m_Slots": [ + { + "m_Id": "0848ba750e0341198cf0bbd413e0efe4" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_OutputChannel": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Texture2DInputMaterialSlot", + "m_ObjectId": "1f247658c7ba45fb93c41f51e21acb0d", + "m_Id": 1, + "m_DisplayName": "Texture", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Texture", + "m_StageCapability": 3, + "m_BareResource": false, + "m_Texture": { + "m_SerializedTexture": "{\"texture\":{\"instanceID\":0}}", + "m_Guid": "" + }, + "m_DefaultType": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "1f46181633594ae0a1fb2adb76b42981", + "m_Id": 5, + "m_DisplayName": "G", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "G", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "200245fc8bbe4826b209ab5f7ffe074c", + "m_Id": 3, + "m_DisplayName": "A", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.UVMaterialSlot", + "m_ObjectId": "204dacb5a95b424facf11cb6f65bd188", + "m_Id": 2, + "m_DisplayName": "UV", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "UV", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0 + }, + "m_Labels": [ + "X", + "Y" + ], + "m_Channel": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BooleanMaterialSlot", + "m_ObjectId": "215a82c127204988b751de7d3a39b955", + "m_Id": 6, + "m_DisplayName": "Outline", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Outline", + "m_StageCapability": 3, + "m_Value": false, + "m_DefaultValue": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.SamplerStateMaterialSlot", + "m_ObjectId": "215b30ae27784ec3a13360a9029af283", + "m_Id": 3, + "m_DisplayName": "Sampler", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Sampler", + "m_StageCapability": 3, + "m_BareResource": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Internal.BooleanShaderProperty", + "m_ObjectId": "21a7a380e66d42e780e2a2a1baa630d5", + "m_Guid": { + "m_GuidSerialized": "b2d0099f-e605-49f5-9959-e7cacae37aa3" + }, + "m_Name": "Bevel Type", + "m_DefaultReferenceName": "Boolean_21a7a380e66d42e780e2a2a1baa630d5", + "m_OverrideReferenceName": "_BevelType", + "m_GeneratePropertyBlock": true, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": false +} + +{ + "m_SGVersion": 3, + "m_Type": "UnityEditor.ShaderGraph.Internal.ColorShaderProperty", + "m_ObjectId": "22b7f3c2bb7b48c0a7fdeb50e33e7d5e", + "m_Guid": { + "m_GuidSerialized": "cd167d3a-7465-4d5a-86fc-0f22dc0ef908" + }, + "m_Name": "Outline Color 1", + "m_DefaultReferenceName": "Color_5550EB71", + "m_OverrideReferenceName": "_OutlineColor1", + "m_GeneratePropertyBlock": true, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": { + "r": 0.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "m_ColorMode": 1 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "232b1aa09e67479abae141d3c76d3c5b", + "m_Id": 0, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "256d41e89a204d22951450de1c38051d", + "m_Id": 0, + "m_DisplayName": "RGBA", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "RGBA", + "m_StageCapability": 2, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector3MaterialSlot", + "m_ObjectId": "26e48352a08441bfa694dcea54c06e36", + "m_Id": 5, + "m_DisplayName": "RGB", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "RGB", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [ + "X", + "Y", + "Z" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "281bcee4777040f8a31ee0e10344e98d", + "m_Id": 0, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 1.0, + "y": 1.0, + "z": 1.0, + "w": 1.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "285f6a9863d54ed2a8150727ad749456", + "m_Group": { + "m_Id": "98934a69591249d5b8b92b39045359a3" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4181.99951171875, + "y": -2415.0, + "width": 154.0, + "height": 34.0 + } + }, + "m_Slots": [ + { + "m_Id": "b42e6dbfbc864097af182cbff5c0c1fb" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "22b7f3c2bb7b48c0a7fdeb50e33e7d5e" + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.Rendering.HighDefinition.ShaderGraph.HDUnlitSubTarget", + "m_ObjectId": "29b1a6d4abc94131be838c0bc77892fc" +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.IsFrontFaceNode", + "m_ObjectId": "2a552a0b828f457c911aa19561e410ae", + "m_Group": { + "m_Id": "d258902c6ec74942afdb9ebf8c1d07f8" + }, + "m_Name": "Is Front Face", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4282.0, + "y": -3681.3330078125, + "width": 121.99999237060547, + "height": 77.33348846435547 + } + }, + "m_Slots": [ + { + "m_Id": "2ef1d888dc9d49e59d6a6950897ddc93" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.CustomFunctionNode", + "m_ObjectId": "2ac79705aa9e415dbb74ec215233fd1b", + "m_Group": { + "m_Id": "" + }, + "m_Name": "Composite (Custom Function)", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -3350.0, + "y": -3810.0, + "width": 213.0, + "height": 118.0 + } + }, + "m_Slots": [ + { + "m_Id": "a75f7ac601c446469802fe7754c1f279" + }, + { + "m_Id": "8c38a5d8327f456e9783740c05382619" + }, + { + "m_Id": "facc84930f544fd7a0205a6176b18ac0" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SourceType": 0, + "m_FunctionName": "Composite", + "m_FunctionSource": "96de908384869cd409c75efa351d5edf", + "m_FunctionBody": "Enter function body here..." +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "2b01ea3023e34c94af1754e4dcea8f2e", + "m_Id": 0, + "m_DisplayName": "Face Color", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BooleanMaterialSlot", + "m_ObjectId": "2bf5f2fdd2984599b7323d10cfb1d240", + "m_Id": 1, + "m_DisplayName": "Filter", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Filter", + "m_StageCapability": 3, + "m_Value": false, + "m_DefaultValue": false +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.Internal.Vector1ShaderProperty", + "m_ObjectId": "2c10b97b92c947ceb307a93759c0228b", + "m_Guid": { + "m_GuidSerialized": "6be0b8ff-a766-4c6b-a6e4-3a72758ac95f" + }, + "m_Name": "Bevel Amount", + "m_DefaultReferenceName": "Vector1_B01DD93E", + "m_OverrideReferenceName": "_BevelAmount", + "m_GeneratePropertyBlock": true, + "m_Precision": 1, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": 0.25, + "m_FloatType": 1, + "m_RangeValues": { + "x": 0.0, + "y": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "2c7a9460724b47daad8df1be144de7c6", + "m_Id": 3, + "m_DisplayName": "Transform", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Transform", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.Internal.Vector2ShaderProperty", + "m_ObjectId": "2d0a269511e34bd1ba9056d2c939dff2", + "m_Guid": { + "m_GuidSerialized": "edbe73dc-53ab-4bc1-9d64-ab36e0e05f03" + }, + "m_Name": "_FaceUVSpeed", + "m_DefaultReferenceName": "Vector2_3A8E0F13", + "m_OverrideReferenceName": "_FaceUVSpeed", + "m_GeneratePropertyBlock": true, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "2db15d90c2204143b225ec4ef08d0755", + "m_Group": { + "m_Id": "98934a69591249d5b8b92b39045359a3" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4387.0, + "y": -2405.0, + "width": 163.0, + "height": 34.0 + } + }, + "m_Slots": [ + { + "m_Id": "def8e0b9d8384982bc5b4c32d877e458" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "46fbf3eeb0ea4470869cba7443249295" + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicValueMaterialSlot", + "m_ObjectId": "2e4eb1ef08bb44178c82e53872485e0f", + "m_Id": 0, + "m_DisplayName": "A", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 3, + "m_Value": { + "e00": 0.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 0.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 0.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 0.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BooleanMaterialSlot", + "m_ObjectId": "2ef1d888dc9d49e59d6a6950897ddc93", + "m_Id": 0, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 2, + "m_Value": true, + "m_DefaultValue": true +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.Rendering.HighDefinition.ShaderGraph.SystemData", + "m_ObjectId": "305e3be306674fcd8bb02273d27ee5b7", + "m_MaterialNeedsUpdateHash": 1, + "m_SurfaceType": 1, + "m_RenderingPass": 4, + "m_BlendMode": 0, + "m_ZTest": 4, + "m_ZWrite": false, + "m_TransparentCullMode": 2, + "m_OpaqueCullMode": 2, + "m_SortPriority": 0, + "m_AlphaTest": true, + "m_TransparentDepthPrepass": false, + "m_TransparentDepthPostpass": false, + "m_SupportLodCrossFade": false, + "m_DoubleSidedMode": 0, + "m_DOTSInstancing": false, + "m_Version": 0, + "m_FirstTimeMigrationExecuted": true, + "inspectorFoldoutMask": 9 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "30ca940fe2794c949f2a1d4d2caaa446", + "m_Id": 2, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.SampleTexture2DNode", + "m_ObjectId": "319916a5921343f7b7eef0e50dc93def", + "m_Group": { + "m_Id": "42cadae0923e4969b50bbc3f78185934" + }, + "m_Name": "Sample Texture 2D", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4791.0, + "y": -3245.0, + "width": 183.99998474121095, + "height": 253.0 + } + }, + "m_Slots": [ + { + "m_Id": "d219977210094c0082c517d8dc00c8bb" + }, + { + "m_Id": "f48f04ad45d046a8b88e71731ed506e7" + }, + { + "m_Id": "e6e80c6b0db545cda26b079a9a78fbb3" + }, + { + "m_Id": "c6bdb985bc16435fa72f5a3c81bb633c" + }, + { + "m_Id": "d1a17e42e7a04dc38984e3c01149445b" + }, + { + "m_Id": "fb15d0ba56d54a6192f11e107aeb5fa8" + }, + { + "m_Id": "c35312edaa2344788b1964ee2f63a236" + }, + { + "m_Id": "c88fcbaeea954a5f9c68c339fa8b604d" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_TextureType": 0, + "m_NormalMapSpace": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "34a67e0fef884f9399e674d9eeaf720c", + "m_Id": 6, + "m_DisplayName": "Color3", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Color3", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "34a72a5ebb04402384a4fd3748111a37", + "m_Id": 0, + "m_DisplayName": "Alpha Clip Threshold", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "AlphaClipThreshold", + "m_StageCapability": 2, + "m_Value": 0.0010000000474974514, + "m_DefaultValue": 0.5, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Texture2DMaterialSlot", + "m_ObjectId": "3535ae87c6dd4769b52b20d9eca61069", + "m_Id": 0, + "m_DisplayName": "_MainTex", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_BareResource": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.SamplerStateMaterialSlot", + "m_ObjectId": "35cbea6373dd4e4f8d0fea36e8add392", + "m_Id": 3, + "m_DisplayName": "Sampler", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Sampler", + "m_StageCapability": 3, + "m_BareResource": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicValueMaterialSlot", + "m_ObjectId": "36a0c473c4c04c3a930dd38f3920d410", + "m_Id": 1, + "m_DisplayName": "B", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 3, + "m_Value": { + "e00": 2.0, + "e01": 2.0, + "e02": 2.0, + "e03": 2.0, + "e10": 2.0, + "e11": 2.0, + "e12": 2.0, + "e13": 2.0, + "e20": 2.0, + "e21": 2.0, + "e22": 2.0, + "e23": 2.0, + "e30": 2.0, + "e31": 2.0, + "e32": 2.0, + "e33": 2.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.UVNode", + "m_ObjectId": "36f1b4d96f2941c39e5cd95d9c1d2ce6", + "m_Group": { + "m_Id": "d0a791a544614667962a9a9a9ce0c68a" + }, + "m_Name": "UV", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -6008.99951171875, + "y": -3341.0, + "width": 144.99998474121095, + "height": 130.0 + } + }, + "m_Slots": [ + { + "m_Id": "65b3dc13b2b6484283ffe5abfe87a06a" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_OutputChannel": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicValueMaterialSlot", + "m_ObjectId": "373f1de8db6c429c9d46c781f741d7a4", + "m_Id": 1, + "m_DisplayName": "B", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 3, + "m_Value": { + "e00": 2.0, + "e01": 2.0, + "e02": 2.0, + "e03": 2.0, + "e10": 2.0, + "e11": 2.0, + "e12": 2.0, + "e13": 2.0, + "e20": 2.0, + "e21": 2.0, + "e22": 2.0, + "e23": 2.0, + "e30": 2.0, + "e31": 2.0, + "e32": 2.0, + "e33": 2.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "3802c81c3be24823aa1d7c9997a33c29", + "m_Id": 2, + "m_DisplayName": "RGBA", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "RGBA", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Texture2DInputMaterialSlot", + "m_ObjectId": "3915c1927ffe49f8967304321cfbe497", + "m_Id": 4, + "m_DisplayName": "Atlas", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Atlas", + "m_StageCapability": 3, + "m_BareResource": true, + "m_Texture": { + "m_SerializedTexture": "{\"texture\":{\"instanceID\":0}}", + "m_Guid": "" + }, + "m_DefaultType": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "39a382d661e2484da71f04c43f48e55f", + "m_Id": 3, + "m_DisplayName": "A", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.VertexColorNode", + "m_ObjectId": "39f2f84f30304d859fb07569e2695f60", + "m_Group": { + "m_Id": "ecf16c34d46f4502ac601f0c38c7576b" + }, + "m_Name": "Vertex Color", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -3423.000244140625, + "y": -3516.0, + "width": 116.0, + "height": 94.0 + } + }, + "m_Slots": [ + { + "m_Id": "4b2d9ea03bf64fa19dcae1511d2581da" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 2, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BlockNode", + "m_ObjectId": "3c50439118b2496f9e390021b0964606", + "m_Group": { + "m_Id": "" + }, + "m_Name": "SurfaceDescription.AlphaClipThreshold", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -3028.0, + "y": -3054.0, + "width": 200.0, + "height": 40.66650390625 + } + }, + "m_Slots": [ + { + "m_Id": "34a72a5ebb04402384a4fd3748111a37" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SerializedDescriptor": "SurfaceDescription.AlphaClipThreshold" +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Texture2DMaterialSlot", + "m_ObjectId": "3d04f5ba6e7b40d281f22eb424145acd", + "m_Id": 0, + "m_DisplayName": "Face Texture", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_BareResource": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "3db1608e927e4102a3c3a88e9fcab39a", + "m_Id": 3, + "m_DisplayName": "Transform", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Transform", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "3dccd64e7f324bc1a75c1479d7a67c51", + "m_Id": 0, + "m_DisplayName": "In", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "In", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.CombineNode", + "m_ObjectId": "3e231021af7b47ba97f2871e7f25d0fe", + "m_Group": { + "m_Id": "ecf16c34d46f4502ac601f0c38c7576b" + }, + "m_Name": "Combine", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -2803.000244140625, + "y": -3520.0, + "width": 140.0, + "height": 166.0 + } + }, + "m_Slots": [ + { + "m_Id": "6ccaced3889e4503a9414d808ec33981" + }, + { + "m_Id": "7f3d71a6c96847c099da45f95aafbecb" + }, + { + "m_Id": "d8edec16956c4f15b7d51d6ec10753f4" + }, + { + "m_Id": "39a382d661e2484da71f04c43f48e55f" + }, + { + "m_Id": "8764669016f6442f8152593c18a649d7" + }, + { + "m_Id": "26e48352a08441bfa694dcea54c06e36" + }, + { + "m_Id": "3e94a0d106064bdb864c960512ef4026" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "3e25be96bb3747738c238cf3a741d5df", + "m_Id": 3, + "m_DisplayName": "B", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Internal.Texture2DShaderProperty", + "m_ObjectId": "3e372195f4bd4845852a37839e5b602d", + "m_Guid": { + "m_GuidSerialized": "60abd046-2a1a-48cd-a0af-2f702f7f53ab" + }, + "m_Name": "_MainTex", + "m_DefaultReferenceName": "Texture2D_90CBF488", + "m_OverrideReferenceName": "_MainTex", + "m_GeneratePropertyBlock": true, + "m_Precision": 1, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": { + "m_SerializedTexture": "{\"texture\":{\"fileID\":28684132378477856,\"guid\":\"8f586378b4e144a9851e7b34d9b748ee\",\"type\":2}}", + "m_Guid": "" + }, + "m_Modifiable": true, + "m_DefaultType": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector2MaterialSlot", + "m_ObjectId": "3e94a0d106064bdb864c960512ef4026", + "m_Id": 6, + "m_DisplayName": "RG", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "RG", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0 + }, + "m_Labels": [ + "X", + "Y" + ] +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.Internal.Vector1ShaderProperty", + "m_ObjectId": "3ec4797e381747829ef4712c85fcf7a1", + "m_Guid": { + "m_GuidSerialized": "020d65cc-50a8-4b8a-a624-90d7b489f549" + }, + "m_Name": "Specular Power", + "m_DefaultReferenceName": "Vector1_3ec4797e381747829ef4712c85fcf7a1", + "m_OverrideReferenceName": "_SpecularPower", + "m_GeneratePropertyBlock": true, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": 1.0, + "m_FloatType": 1, + "m_RangeValues": { + "x": 0.0, + "y": 4.0 + } +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.Internal.Vector2ShaderProperty", + "m_ObjectId": "3fdf4b7bc5d4426492dcc057603ef4a6", + "m_Guid": { + "m_GuidSerialized": "675d2567-3fca-4da6-9462-dfa4924950f1" + }, + "m_Name": "_OutlineUVSpeed", + "m_DefaultReferenceName": "Vector2_D66D89E6", + "m_OverrideReferenceName": "_OutlineUVSpeed", + "m_GeneratePropertyBlock": true, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicValueMaterialSlot", + "m_ObjectId": "400d0b6c95dd4540ad3da3e8cb7e50b2", + "m_Id": 2, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "e00": 0.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 0.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 0.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 0.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicValueMaterialSlot", + "m_ObjectId": "41986ac6400d46709d0ef043a67f6b34", + "m_Id": 2, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "e00": 0.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 0.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 0.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 0.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "41b9b79b3859472882bcea393703eec0", + "m_Id": 0, + "m_DisplayName": "RGBA", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "RGBA", + "m_StageCapability": 2, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.Internal.Vector1ShaderProperty", + "m_ObjectId": "424dbeeb009344efa29c304c4979e3d6", + "m_Guid": { + "m_GuidSerialized": "314c37de-c6f2-4463-866d-8588f6fc119e" + }, + "m_Name": "Diffuse Shadow", + "m_DefaultReferenceName": "Vector1_424dbeeb009344efa29c304c4979e3d6", + "m_OverrideReferenceName": "_Diffuse", + "m_GeneratePropertyBlock": true, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": 0.30000001192092898, + "m_FloatType": 1, + "m_RangeValues": { + "x": 0.0, + "y": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "42a586e4f6ec40eeaba891b7fd133864", + "m_Group": { + "m_Id": "484b51c50485473b819c4f05087b32d7" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4934.0, + "y": -4442.99951171875, + "width": 133.99998474121095, + "height": 33.999996185302737 + } + }, + "m_Slots": [ + { + "m_Id": "da7a06d393a44089842070d51d2aa0a6" + } + ], + "synonyms": [], + "m_Precision": 1, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "3e372195f4bd4845852a37839e5b602d" + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.GroupData", + "m_ObjectId": "42cadae0923e4969b50bbc3f78185934", + "m_Title": "Face + 3 Outlines + Underlay", + "m_Position": { + "x": -5468.0, + "y": -3558.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "4328cdbf78b94c038fd614c59bfe1cac", + "m_Id": 0, + "m_DisplayName": "RGBA", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "RGBA", + "m_StageCapability": 2, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.CustomFunctionNode", + "m_ObjectId": "44317f2e371447e2a8d894f8a021a235", + "m_Group": { + "m_Id": "484b51c50485473b819c4f05087b32d7" + }, + "m_Name": "Layer1 (Custom Function)", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4001.0, + "y": -4168.0, + "width": 191.0, + "height": 118.0 + } + }, + "m_Slots": [ + { + "m_Id": "10a99c07aad742349d258db16838c129" + }, + { + "m_Id": "b85d677872b44421bf5536f42ba0267c" + }, + { + "m_Id": "75aba700d74d4b2687bf3166cf1da3e2" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SourceType": 0, + "m_FunctionName": "Layer1", + "m_FunctionSource": "96de908384869cd409c75efa351d5edf", + "m_FunctionBody": "Enter function body here..." +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "44806230fa384c1e95f9c5918a14f056", + "m_Id": 7, + "m_DisplayName": "A", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "4488af8ff6a7421298a7e827f567263b", + "m_Group": { + "m_Id": "484b51c50485473b819c4f05087b32d7" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4226.0, + "y": -4109.0, + "width": 158.0, + "height": 34.0 + } + }, + "m_Slots": [ + { + "m_Id": "66f69ef16eac4eb48357bde804cf3c39" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "8cf8aae64c1d443f9303126886b40f17" + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.ColorRGBMaterialSlot", + "m_ObjectId": "4590bfa2a0664b65b6f073bae33a071f", + "m_Id": 0, + "m_DisplayName": "Emission", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Emission", + "m_StageCapability": 2, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [], + "m_ColorMode": 1, + "m_DefaultColor": { + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.UVNode", + "m_ObjectId": "4648b46ad29a4008a80de4f8a5a5b813", + "m_Group": { + "m_Id": "98934a69591249d5b8b92b39045359a3" + }, + "m_Name": "UV", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4613.0, + "y": -2415.0, + "width": 145.0, + "height": 130.0 + } + }, + "m_Slots": [ + { + "m_Id": "b2baf44eae52473cb6cda7b1debece01" + } + ], + "synonyms": [], + "m_Precision": 1, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_OutputChannel": 1 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Internal.Texture2DShaderProperty", + "m_ObjectId": "46fbf3eeb0ea4470869cba7443249295", + "m_Guid": { + "m_GuidSerialized": "be87c5a3-e361-4b95-89c8-911c39a51c0d" + }, + "m_Name": "Outline Texture", + "m_DefaultReferenceName": "Texture2D_A0B54237", + "m_OverrideReferenceName": "_OutlineTex", + "m_GeneratePropertyBlock": true, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": { + "m_SerializedTexture": "{\"texture\":{\"instanceID\":0}}", + "m_Guid": "" + }, + "m_Modifiable": true, + "m_DefaultType": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "47d020251e9841a5b1f0fd64396026a1", + "m_Id": 1, + "m_DisplayName": "B", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 3, + "m_Value": { + "x": 1.0, + "y": 1.0, + "z": 1.0, + "w": 1.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BlockNode", + "m_ObjectId": "48390d02257d41bf98eace1deaa4c539", + "m_Group": { + "m_Id": "" + }, + "m_Name": "VertexDescription.Position", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": 0.0, + "y": 0.0, + "width": 0.0, + "height": 0.0 + } + }, + "m_Slots": [ + { + "m_Id": "8036d0e6090b456e9b4ea87227868236" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SerializedDescriptor": "VertexDescription.Position" +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.GroupData", + "m_ObjectId": "484b51c50485473b819c4f05087b32d7", + "m_Title": "Underlay", + "m_Position": { + "x": -5253.0, + "y": -4542.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "4907352322c644ebacdf2ca30f2994fd", + "m_Id": 4, + "m_DisplayName": "A", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.Internal.Vector2ShaderProperty", + "m_ObjectId": "49e7c3ad55ce458797f0e60c950cb965", + "m_Guid": { + "m_GuidSerialized": "31b55db9-0da1-4ec4-af2b-d83747ed5bc4" + }, + "m_Name": "Underlay Offset", + "m_DefaultReferenceName": "Vector2_CE9DEDB3", + "m_OverrideReferenceName": "_UnderlayOffset", + "m_GeneratePropertyBlock": true, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "4a66dcbe712a4d40bd8f355b834594b5", + "m_Id": 6, + "m_DisplayName": "B", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.CombineNode", + "m_ObjectId": "4abff6ff92fa4a05b203f10580988335", + "m_Group": { + "m_Id": "42cadae0923e4969b50bbc3f78185934" + }, + "m_Name": "Combine", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4323.99951171875, + "y": -3498.0, + "width": 140.0, + "height": 166.0 + } + }, + "m_Slots": [ + { + "m_Id": "b015d1b7e4134c59baf6851e7649802c" + }, + { + "m_Id": "d9dc4839ee2847999110bdb234d6041a" + }, + { + "m_Id": "91d6a9a5fbc04ea49075cb51835e7264" + }, + { + "m_Id": "f42ad06b3c6a45d3ab33de904c063412" + }, + { + "m_Id": "ed6c215a65584deeaefad1d2c7743044" + }, + { + "m_Id": "edbee7a8952b46529ac5ad0365775774" + }, + { + "m_Id": "70337a74f6ad4b7bb6befc825219bab1" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "4b2d9ea03bf64fa19dcae1511d2581da", + "m_Id": 0, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 1.0, + "y": 1.0, + "z": 1.0, + "w": 1.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "4bda5c294e1949138d033640e1d385b4", + "m_Id": 1, + "m_DisplayName": "B", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 3, + "m_Value": { + "x": 1.0, + "y": 1.0, + "z": 1.0, + "w": 1.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "4c28ee9109014fa086e5de7a3993341d", + "m_Id": 0, + "m_DisplayName": "Softness", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "4c334de01ecd429baa7652fc6002536b", + "m_Id": 0, + "m_DisplayName": "In", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "In", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "4d1cb1a475df49f9a148195a65f5453a", + "m_Id": 0, + "m_DisplayName": "A", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 3, + "m_Value": { + "x": 1.0, + "y": 1.0, + "z": 1.0, + "w": 1.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "4d9ce48719d143748f9f8e22da6f9ddc", + "m_Id": 5, + "m_DisplayName": "TextureWidth", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "TextureWidth", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "4e64dac49ddc47c3b5b1e27b17a08304", + "m_Id": 2, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Texture2DInputMaterialSlot", + "m_ObjectId": "4eb3c00a1ca44e10be833b7ca61ff059", + "m_Id": 1, + "m_DisplayName": "Texture", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Texture", + "m_StageCapability": 3, + "m_BareResource": false, + "m_Texture": { + "m_SerializedTexture": "{\"texture\":{\"fileID\":-2362172177983852347,\"guid\":\"dda5bcb0d1e9515498f6e4e038bbefe6\",\"type\":2}}", + "m_Guid": "" + }, + "m_DefaultType": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "4f194ff591484e908fc2bcdacbcf2570", + "m_Group": { + "m_Id": "013228b0fdf1424097798f0973a9a4fb" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4310.0, + "y": -2771.0, + "width": 134.0, + "height": 34.0 + } + }, + "m_Slots": [ + { + "m_Id": "2b01ea3023e34c94af1754e4dcea8f2e" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "dc75c4e3a1bc4bb0a128086c2b0679a5" + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Texture2DInputMaterialSlot", + "m_ObjectId": "509e6f38505b4b0695b263706a55028f", + "m_Id": 1, + "m_DisplayName": "Texture", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Texture", + "m_StageCapability": 3, + "m_BareResource": false, + "m_Texture": { + "m_SerializedTexture": "{\"texture\":{\"fileID\":-2362172177983852347,\"guid\":\"dda5bcb0d1e9515498f6e4e038bbefe6\",\"type\":2}}", + "m_Guid": "" + }, + "m_DefaultType": 0 +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.CustomFunctionNode", + "m_ObjectId": "51378bae98a94c309785d14cd5cbb453", + "m_Group": { + "m_Id": "d258902c6ec74942afdb9ebf8c1d07f8" + }, + "m_Name": "GetSurfaceNormal (Custom Function)", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4067.333251953125, + "y": -3881.99951171875, + "width": 263.9999694824219, + "height": 189.99998474121095 + } + }, + "m_Slots": [ + { + "m_Id": "5b0077c23eae443887872f84227deccc" + }, + { + "m_Id": "3915c1927ffe49f8967304321cfbe497" + }, + { + "m_Id": "4d9ce48719d143748f9f8e22da6f9ddc" + }, + { + "m_Id": "ebd6d75abcb84108bcadbfe7ee5f6244" + }, + { + "m_Id": "ef9738ec7e894772a14e9dce441c16c6" + }, + { + "m_Id": "9eeec1a9713045af8845cea263d5ea48" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SourceType": 0, + "m_FunctionName": "GetSurfaceNormal", + "m_FunctionSource": "96de908384869cd409c75efa351d5edf", + "m_FunctionBody": "Enter function body here..." +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.SamplerStateMaterialSlot", + "m_ObjectId": "51f76f8a53ad43a4ad028426548ce9ba", + "m_Id": 3, + "m_DisplayName": "Sampler", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Sampler", + "m_StageCapability": 3, + "m_BareResource": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "52798bdb86f6400e86489a7a368e9f8b", + "m_Group": { + "m_Id": "d0a791a544614667962a9a9a9ce0c68a" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -6154.99951171875, + "y": -3169.0, + "width": 134.0, + "height": 34.0 + } + }, + "m_Slots": [ + { + "m_Id": "1df58cfa4dad4c449d01ee1c5ea05f2e" + } + ], + "synonyms": [], + "m_Precision": 1, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "3e372195f4bd4845852a37839e5b602d" + } +} + +{ + "m_SGVersion": 3, + "m_Type": "UnityEditor.ShaderGraph.Internal.ColorShaderProperty", + "m_ObjectId": "53073e5ea924459fa6681a4943e9f947", + "m_Guid": { + "m_GuidSerialized": "5fdac24e-2d58-4471-80ce-79c3ab9a2564" + }, + "m_Name": "Outline Color 2", + "m_DefaultReferenceName": "Color_DBAB5AEC", + "m_OverrideReferenceName": "_OutlineColor2", + "m_GeneratePropertyBlock": true, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": { + "r": 0.009433984756469727, + "g": 0.02534518577158451, + "b": 1.0, + "a": 1.0 + }, + "m_ColorMode": 1 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "54d7a93ffec5490aa4591da23a21b693", + "m_Id": 1, + "m_DisplayName": "G", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "G", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector2MaterialSlot", + "m_ObjectId": "55ffa45ec3654d5e88089fb40d2b0465", + "m_Id": 4, + "m_DisplayName": "AnimSpeed", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "AnimSpeed", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0 + }, + "m_Labels": [ + "X", + "Y" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.MultiplyNode", + "m_ObjectId": "56c25395796e4d2fbe5c892d428d1620", + "m_Group": { + "m_Id": "42cadae0923e4969b50bbc3f78185934" + }, + "m_Name": "Multiply", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -5102.99951171875, + "y": -3427.0, + "width": 130.0, + "height": 118.0 + } + }, + "m_Slots": [ + { + "m_Id": "9eb8137a6c2e41bbafdc8b0732dd47a3" + }, + { + "m_Id": "36a0c473c4c04c3a930dd38f3920d410" + }, + { + "m_Id": "068ae649e00b40e198ec5a30ad741fab" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.UVMaterialSlot", + "m_ObjectId": "57abc172afd449e2a4d567f93432507b", + "m_Id": 2, + "m_DisplayName": "UV", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "UV", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0 + }, + "m_Labels": [ + "X", + "Y" + ], + "m_Channel": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "582d6e289dbe4fdca7cf0307273eaa2f", + "m_Id": 0, + "m_DisplayName": "RGBA", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "RGBA", + "m_StageCapability": 2, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.MultiplyNode", + "m_ObjectId": "59bd90a849624124bae6464ee3669aa6", + "m_Group": { + "m_Id": "98934a69591249d5b8b92b39045359a3" + }, + "m_Name": "Multiply", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4005.999755859375, + "y": -2395.0, + "width": 130.0, + "height": 117.99999237060547 + } + }, + "m_Slots": [ + { + "m_Id": "2e4eb1ef08bb44178c82e53872485e0f" + }, + { + "m_Id": "8695190a5e614f2d90081871a8a06fc2" + }, + { + "m_Id": "81bdb47901ef48e5a588c6724b1b0142" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector3MaterialSlot", + "m_ObjectId": "5b0077c23eae443887872f84227deccc", + "m_Id": 0, + "m_DisplayName": "Normal", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Normal", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [ + "X", + "Y", + "Z" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "5b3ff4ee364f4d7a923b530ad60d8762", + "m_Id": 0, + "m_DisplayName": "Width", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Width", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.Internal.Vector1ShaderProperty", + "m_ObjectId": "5bd258837c514ff7ab0bf7027e762c18", + "m_Guid": { + "m_GuidSerialized": "2d8f3ee9-1307-4b58-a60d-526e86b07109" + }, + "m_Name": "Bevel Roundness", + "m_DefaultReferenceName": "Vector1_AB6A015F", + "m_OverrideReferenceName": "_BevelRoundness", + "m_GeneratePropertyBlock": true, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": 0.0, + "m_FloatType": 1, + "m_RangeValues": { + "x": 0.0, + "y": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "5da82bf481f8489ebd05e997f617f51b", + "m_Id": 4, + "m_DisplayName": "Isoperimeter", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Isoperimeter", + "m_StageCapability": 3, + "m_Value": 4.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "5e42524569844befad16fda5a94eb9cb", + "m_Id": 0, + "m_DisplayName": "R", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "R", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.Internal.Vector1ShaderProperty", + "m_ObjectId": "5fbe253f3e444f2aa8ac717f9c856619", + "m_Guid": { + "m_GuidSerialized": "0a61c93f-6430-4aa6-af07-79bc3b411ccd" + }, + "m_Name": "Bevel Width", + "m_DefaultReferenceName": "Vector1_B50BBFCC", + "m_OverrideReferenceName": "_BevelWidth", + "m_GeneratePropertyBlock": true, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": 0.5, + "m_FloatType": 1, + "m_RangeValues": { + "x": 0.0, + "y": 0.5 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "61133d79a89048c195f54939b2a1d30a", + "m_Id": 2, + "m_DisplayName": "Alpha", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Alpha", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "61a6ac5f29344d109411f26850ab0a96", + "m_Id": 6, + "m_DisplayName": "B", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "6271438664e74b3fbf723bd6a1f50f8b", + "m_Id": 6, + "m_DisplayName": "B", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "62bc551cea604e88b7858cc37d96a98a", + "m_Id": 2, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.Internal.Vector2ShaderProperty", + "m_ObjectId": "636180f6e0504f2baaa5cc086980cb47", + "m_Guid": { + "m_GuidSerialized": "c1223e37-093d-4d5a-b2b0-cd9cc3e4f88e" + }, + "m_Name": "Outline Offset 1", + "m_DefaultReferenceName": "Vector2_636180f6e0504f2baaa5cc086980cb47", + "m_OverrideReferenceName": "_OutlineOffset1", + "m_GeneratePropertyBlock": true, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "63c7cd57fc3c45a9a97b514fdae32693", + "m_Group": { + "m_Id": "42cadae0923e4969b50bbc3f78185934" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -5266.99951171875, + "y": -3387.0, + "width": 156.99998474121095, + "height": 34.0 + } + }, + "m_Slots": [ + { + "m_Id": "c422a9a9ff824176aad2241f58c44d0b" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "636180f6e0504f2baaa5cc086980cb47" + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "641eda269d7b4da9acb65f8d50035ea9", + "m_Id": 0, + "m_DisplayName": "SSR", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "SSR", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "65b3dc13b2b6484283ffe5abfe87a06a", + "m_Id": 0, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.SampleTexture2DNode", + "m_ObjectId": "65c8e64a7535466e933eed08a2f77532", + "m_Group": { + "m_Id": "42cadae0923e4969b50bbc3f78185934" + }, + "m_Name": "Sample Texture 2D", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4791.0, + "y": -3499.0, + "width": 183.99998474121095, + "height": 253.0 + } + }, + "m_Slots": [ + { + "m_Id": "256d41e89a204d22951450de1c38051d" + }, + { + "m_Id": "0a67ca5280214bd794dc0ad66b5710a9" + }, + { + "m_Id": "ebbd94a7102a4457a48ac492de3bff14" + }, + { + "m_Id": "6271438664e74b3fbf723bd6a1f50f8b" + }, + { + "m_Id": "c9b722d107ce4cd6a748c883472b9b0f" + }, + { + "m_Id": "74cf69e61bef44589521f1bf2bf3c59a" + }, + { + "m_Id": "6e532f83d1c44e839bcfc5845d3b01d6" + }, + { + "m_Id": "cb5e9f9567e84f8fa5463efc0e256e19" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_TextureType": 0, + "m_NormalMapSpace": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "66f69ef16eac4eb48357bde804cf3c39", + "m_Id": 0, + "m_DisplayName": "_UnderlayColor", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "67a519f507384ff1861df5d8d5b486be", + "m_Group": { + "m_Id": "d258902c6ec74942afdb9ebf8c1d07f8" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4278.0, + "y": -3939.99951171875, + "width": 135.3330078125, + "height": 33.999996185302737 + } + }, + "m_Slots": [ + { + "m_Id": "c3e6d7c20c184bf39fd8822130e693e7" + } + ], + "synonyms": [], + "m_Precision": 1, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "3e372195f4bd4845852a37839e5b602d" + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "68ec7c31365549d6a8ce883edfc02de2", + "m_Id": 4, + "m_DisplayName": "Color1", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Color1", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "6a7af6143e114a538663e71f56731a21", + "m_Id": 2, + "m_DisplayName": "G", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "G", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.MultiplyNode", + "m_ObjectId": "6b2f65c1463f4f7bad16c54a95d2fe75", + "m_Group": { + "m_Id": "42cadae0923e4969b50bbc3f78185934" + }, + "m_Name": "Multiply", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -5101.0, + "y": -3301.0, + "width": 130.0, + "height": 118.0 + } + }, + "m_Slots": [ + { + "m_Id": "1d35fa1fb5004f96a65ace54fbe4f1ad" + }, + { + "m_Id": "fa6de3be9f5b4411b5081b49e645f424" + }, + { + "m_Id": "400d0b6c95dd4540ad3da3e8cb7e50b2" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "6ccaced3889e4503a9414d808ec33981", + "m_Id": 0, + "m_DisplayName": "R", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "R", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "6dfc1177dd0541a7a780fbf911ad1956", + "m_Id": 0, + "m_DisplayName": "_OutlineTexture_ST", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "6e13f3cd573c467a94379f45d96cb690", + "m_Id": 2, + "m_DisplayName": "SSR", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "SSR", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.UVMaterialSlot", + "m_ObjectId": "6e532f83d1c44e839bcfc5845d3b01d6", + "m_Id": 2, + "m_DisplayName": "UV", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "UV", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0 + }, + "m_Labels": [], + "m_Channel": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BlockNode", + "m_ObjectId": "6e8946a245e842b38231d4a241bfb3ef", + "m_Group": { + "m_Id": "" + }, + "m_Name": "SurfaceDescription.BaseColor", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -3026.0, + "y": -3110.0, + "width": 200.0, + "height": 40.66650390625 + } + }, + "m_Slots": [ + { + "m_Id": "ef0b93f78372439696f50711eaf57d90" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SerializedDescriptor": "SurfaceDescription.BaseColor" +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "6fbdcc5a972b4fa883dc5f21e525a376", + "m_Id": 0, + "m_DisplayName": "A", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 3, + "m_Value": { + "x": 1.0, + "y": 1.0, + "z": 1.0, + "w": 1.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector2MaterialSlot", + "m_ObjectId": "70337a74f6ad4b7bb6befc825219bab1", + "m_Id": 6, + "m_DisplayName": "RG", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "RG", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "712da461f71a454db59d349f752d41ee", + "m_Id": 2, + "m_DisplayName": "Height", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Height", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "71dd947935b64ce38f0d25406dde447b", + "m_Id": 5, + "m_DisplayName": "G", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "G", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "724e17584e97443e9e285dfa7253c8e3", + "m_Id": 0, + "m_DisplayName": "Alpha", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Alpha", + "m_StageCapability": 2, + "m_Value": 0.15000000596046449, + "m_DefaultValue": 1.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Texture2DMaterialSlot", + "m_ObjectId": "72fb5a0d7796446b9e2b929cb32facdc", + "m_Id": 0, + "m_DisplayName": "_MainTex", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_BareResource": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.UVNode", + "m_ObjectId": "7444469eb9884253819add9ef96baa25", + "m_Group": { + "m_Id": "d258902c6ec74942afdb9ebf8c1d07f8" + }, + "m_Name": "UV", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4298.0, + "y": -3809.99951171875, + "width": 144.66648864746095, + "height": 129.33323669433595 + } + }, + "m_Slots": [ + { + "m_Id": "03182b3263304258b265266325c21f65" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_OutputChannel": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "748c31bbcecc4b30bec2e42c0612175b", + "m_Id": 0, + "m_DisplayName": "A", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 3, + "m_Value": { + "x": 1.0, + "y": 1.0, + "z": 1.0, + "w": 1.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.Internal.Vector2ShaderProperty", + "m_ObjectId": "74b41464cbed4e9e8e23af5ab9be40cf", + "m_Guid": { + "m_GuidSerialized": "41afbdcb-f3ae-4340-8973-1c1998c992a2" + }, + "m_Name": "Outline Offset 2", + "m_DefaultReferenceName": "", + "m_OverrideReferenceName": "_OutlineOffset2", + "m_GeneratePropertyBlock": true, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Texture2DInputMaterialSlot", + "m_ObjectId": "74cf69e61bef44589521f1bf2bf3c59a", + "m_Id": 1, + "m_DisplayName": "Texture", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Texture", + "m_StageCapability": 3, + "m_BareResource": false, + "m_Texture": { + "m_SerializedTexture": "{\"texture\":{\"instanceID\":0}}", + "m_Guid": "" + }, + "m_DefaultType": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector2MaterialSlot", + "m_ObjectId": "757174b6f25040fdbb20355a21752222", + "m_Id": 0, + "m_DisplayName": "Outline Offset 2", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "75aba700d74d4b2687bf3166cf1da3e2", + "m_Id": 2, + "m_DisplayName": "RGBA", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "RGBA", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector2MaterialSlot", + "m_ObjectId": "75c5657544c648058b20cea090f48dbf", + "m_Id": 0, + "m_DisplayName": "_OutlineUVSpeed", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0 + }, + "m_Labels": [ + "X", + "Y" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "767769f736d5478cba5f10a415e28e7f", + "m_Id": 5, + "m_DisplayName": "G", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "G", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicValueMaterialSlot", + "m_ObjectId": "773b90134e894e429203c0c83e80b9de", + "m_Id": 2, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "e00": 0.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 0.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 0.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 0.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "77e28f3e930b4c249145630ec961af95", + "m_Id": 0, + "m_DisplayName": "A", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.Rendering.HighDefinition.ShaderGraph.HDUnlitData", + "m_ObjectId": "77ebd01f5b3149ad810a5acbffc85921", + "m_EnableShadowMatte": false, + "m_DistortionOnly": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BooleanMaterialSlot", + "m_ObjectId": "79147f6986644769b58d9ed64fe771e1", + "m_Id": 0, + "m_DisplayName": "OutlineMode", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": false, + "m_DefaultValue": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.MultiplyNode", + "m_ObjectId": "7984fd094e1147bdabb4e26fbd3d31c8", + "m_Group": { + "m_Id": "ecf16c34d46f4502ac601f0c38c7576b" + }, + "m_Name": "Multiply", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -3113.000244140625, + "y": -3468.0, + "width": 130.0, + "height": 118.0 + } + }, + "m_Slots": [ + { + "m_Id": "082e9706dffc4c188270980d4e44ce0f" + }, + { + "m_Id": "f2a351a5375c441b8d9ab7e2c9545a77" + }, + { + "m_Id": "41986ac6400d46709d0ef043a67f6b34" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 3, + "m_Type": "UnityEditor.ShaderGraph.Internal.ColorShaderProperty", + "m_ObjectId": "7a046f410ce64aa88438b0bfd412c045", + "m_Guid": { + "m_GuidSerialized": "d47271f5-5a84-47bf-a09e-c825d2aeb013" + }, + "m_Name": "Outline Color 3", + "m_DefaultReferenceName": "Color_551702C5", + "m_OverrideReferenceName": "_OutlineColor3", + "m_GeneratePropertyBlock": true, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": { + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 1.0 + }, + "m_ColorMode": 1 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "7a0f504e4175406dbd8134250f4e350b", + "m_Id": 0, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.SubtractNode", + "m_ObjectId": "7a80e8839f0e4a1d9a6c0814f8793ee6", + "m_Group": { + "m_Id": "42cadae0923e4969b50bbc3f78185934" + }, + "m_Name": "Subtract", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4961.99951171875, + "y": -3452.0, + "width": 130.0, + "height": 118.0 + } + }, + "m_Slots": [ + { + "m_Id": "6fbdcc5a972b4fa883dc5f21e525a376" + }, + { + "m_Id": "0ba4932e164847878ddb7b7bcff96985" + }, + { + "m_Id": "9178663316db43d582f1c4a127d307c6" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "7acfafd73b8c4dfab8c55c18a887e087", + "m_Id": 4, + "m_DisplayName": "R", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "R", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "7b8a19bd115e4167a25b59cb3218a817", + "m_Id": 0, + "m_DisplayName": "A", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 3, + "m_Value": { + "x": 1.0, + "y": 1.0, + "z": 1.0, + "w": 1.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicValueMaterialSlot", + "m_ObjectId": "7c27ccb2c2dc4ca59c5438c3358630ca", + "m_Id": 0, + "m_DisplayName": "A", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 3, + "m_Value": { + "e00": 0.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 0.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 0.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 0.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.Rendering.HighDefinition.ShaderGraph.HDTarget", + "m_ObjectId": "7cf0e63037a74dc2a9f591225c678ff4", + "m_ActiveSubTarget": { + "m_Id": "29b1a6d4abc94131be838c0bc77892fc" + }, + "m_Datas": [ + { + "m_Id": "00996039d61e400a9e854ce591ac35a0" + }, + { + "m_Id": "305e3be306674fcd8bb02273d27ee5b7" + }, + { + "m_Id": "77ebd01f5b3149ad810a5acbffc85921" + } + ], + "m_CustomEditorGUI": "TMPro.EditorUtilities.TMP_SDF_HDRPUnlitShaderGUI" +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.SubtractNode", + "m_ObjectId": "7d7696aa6d184b4fb9c316a9dec37aee", + "m_Group": { + "m_Id": "42cadae0923e4969b50bbc3f78185934" + }, + "m_Name": "Subtract", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4959.0, + "y": -3326.0, + "width": 130.0, + "height": 118.0 + } + }, + "m_Slots": [ + { + "m_Id": "4d1cb1a475df49f9a148195a65f5453a" + }, + { + "m_Id": "47d020251e9841a5b1f0fd64396026a1" + }, + { + "m_Id": "62bc551cea604e88b7858cc37d96a98a" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.MultiplyNode", + "m_ObjectId": "7d78a616c2754cc28d1f32cf66ade611", + "m_Group": { + "m_Id": "013228b0fdf1424097798f0973a9a4fb" + }, + "m_Name": "Multiply", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4006.000244140625, + "y": -2795.0, + "width": 130.0, + "height": 117.99999237060547 + } + }, + "m_Slots": [ + { + "m_Id": "d9bcb754db834583b6518c5ed5152114" + }, + { + "m_Id": "861d4258049a4a3e8164f7297090f88e" + }, + { + "m_Id": "a7c06457d7454693a8bc3dc95257b2c2" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "7e0fadb2533f496192c1ad3e78642010", + "m_Group": { + "m_Id": "484b51c50485473b819c4f05087b32d7" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4444.0, + "y": -4188.0, + "width": 173.0, + "height": 34.0 + } + }, + "m_Slots": [ + { + "m_Id": "d48c3871e3064027a10ae9f4babd3be0" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "952d0fa5cd744df0b434cd38e9a90b93" + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BlockNode", + "m_ObjectId": "7f2e6b5f15364ed9835d67d0cf4f8f65", + "m_Group": { + "m_Id": "" + }, + "m_Name": "VertexDescription.Tangent", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -2586.0, + "y": -3592.0, + "width": 200.0, + "height": 41.0 + } + }, + "m_Slots": [ + { + "m_Id": "85ff8667d72947edada4e9fb4ff60559" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SerializedDescriptor": "VertexDescription.Tangent" +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "7f3d71a6c96847c099da45f95aafbecb", + "m_Id": 1, + "m_DisplayName": "G", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "G", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PositionMaterialSlot", + "m_ObjectId": "8036d0e6090b456e9b4ea87227868236", + "m_Id": 0, + "m_DisplayName": "Position", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Position", + "m_StageCapability": 1, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [ + "X", + "Y", + "Z" + ], + "m_Space": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "80e665a5eeb64730a51742f698bf0d48", + "m_Id": 4, + "m_DisplayName": "R", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "R", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "8135ca333f8f4ea78163743e6ec1f55c", + "m_Group": { + "m_Id": "42cadae0923e4969b50bbc3f78185934" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4081.999755859375, + "y": -3140.0, + "width": 156.0, + "height": 34.0 + } + }, + "m_Slots": [ + { + "m_Id": "d6a6a119394e4082a11bc024a6e42ef8" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "53073e5ea924459fa6681a4943e9f947" + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicValueMaterialSlot", + "m_ObjectId": "81bdb47901ef48e5a588c6724b1b0142", + "m_Id": 2, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "e00": 0.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 0.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 0.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 0.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.Internal.Vector1ShaderProperty", + "m_ObjectId": "81e8ed0534534674a74263e6161a2a1a", + "m_Guid": { + "m_GuidSerialized": "78aab961-c4a8-41f3-b203-1239c3b33b13" + }, + "m_Name": "Underlay Dilate", + "m_DefaultReferenceName": "Vector1_D48690B9", + "m_OverrideReferenceName": "_UnderlayDilate", + "m_GeneratePropertyBlock": true, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": 0.0, + "m_FloatType": 0, + "m_RangeValues": { + "x": 0.0, + "y": 1.0 + } +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.Internal.Vector1ShaderProperty", + "m_ObjectId": "82af2db1018543d7832af96c1cfc981f", + "m_Guid": { + "m_GuidSerialized": "37906c7b-9a3a-454b-a62a-9aa097e64bde" + }, + "m_Name": "Light Angle", + "m_DefaultReferenceName": "Vector1_82af2db1018543d7832af96c1cfc981f", + "m_OverrideReferenceName": "_LightAngle", + "m_GeneratePropertyBlock": true, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": 0.0, + "m_FloatType": 1, + "m_RangeValues": { + "x": 0.0, + "y": 6.28000020980835 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "82d5443fe54d4a3b9420f8745d00a632", + "m_Id": 5, + "m_DisplayName": "Softness", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Softness", + "m_StageCapability": 3, + "m_Value": 8.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector2MaterialSlot", + "m_ObjectId": "84dc74cdbd8c45e1b189e4fd9a69942d", + "m_Id": 0, + "m_DisplayName": "Outline Offset 3", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.CustomFunctionNode", + "m_ObjectId": "85a1ad8e741e41759002e8cdc8cd0b96", + "m_Group": { + "m_Id": "d0a791a544614667962a9a9a9ce0c68a" + }, + "m_Name": "ScreenSpaceRatio (Custom Function)", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -5802.0, + "y": -3363.0, + "width": 258.0, + "height": 142.0 + } + }, + "m_Slots": [ + { + "m_Id": "6e13f3cd573c467a94379f45d96cb690" + }, + { + "m_Id": "8e6ed600f6504f4083092f5b511e44c4" + }, + { + "m_Id": "93b161cce4504cb79c97b6d8db178de7" + }, + { + "m_Id": "2bf5f2fdd2984599b7323d10cfb1d240" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SourceType": 0, + "m_FunctionName": "ScreenSpaceRatio", + "m_FunctionSource": "96de908384869cd409c75efa351d5edf", + "m_FunctionBody": "Enter function body here..." +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "85b5940eb77e4625812ded7215bab8d7", + "m_Group": { + "m_Id": "42cadae0923e4969b50bbc3f78185934" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4081.999755859375, + "y": -3096.0, + "width": 156.0, + "height": 34.0 + } + }, + "m_Slots": [ + { + "m_Id": "ada023d617104472b8ab75a81558c0a1" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "7a046f410ce64aa88438b0bfd412c045" + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.TangentMaterialSlot", + "m_ObjectId": "85ff8667d72947edada4e9fb4ff60559", + "m_Id": 0, + "m_DisplayName": "Tangent", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Tangent", + "m_StageCapability": 1, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [ + "X", + "Y", + "Z" + ], + "m_Space": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicValueMaterialSlot", + "m_ObjectId": "861d4258049a4a3e8164f7297090f88e", + "m_Id": 1, + "m_DisplayName": "B", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 3, + "m_Value": { + "e00": 2.0, + "e01": 2.0, + "e02": 2.0, + "e03": 2.0, + "e10": 2.0, + "e11": 2.0, + "e12": 2.0, + "e13": 2.0, + "e20": 2.0, + "e21": 2.0, + "e22": 2.0, + "e23": 2.0, + "e30": 2.0, + "e31": 2.0, + "e32": 2.0, + "e33": 2.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.Internal.Vector4ShaderProperty", + "m_ObjectId": "867a4ae13c0d4a028c71bc1063824c14", + "m_Guid": { + "m_GuidSerialized": "d483c212-0a30-4f6d-b94d-9abbc83a6522" + }, + "m_Name": "Outline Width", + "m_DefaultReferenceName": "Vector4_C68C9E14", + "m_OverrideReferenceName": "_IsoPerimeter", + "m_GeneratePropertyBlock": true, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 2, + "m_Hidden": false, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicValueMaterialSlot", + "m_ObjectId": "8695190a5e614f2d90081871a8a06fc2", + "m_Id": 1, + "m_DisplayName": "B", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 3, + "m_Value": { + "e00": 2.0, + "e01": 2.0, + "e02": 2.0, + "e03": 2.0, + "e10": 2.0, + "e11": 2.0, + "e12": 2.0, + "e13": 2.0, + "e20": 2.0, + "e21": 2.0, + "e22": 2.0, + "e23": 2.0, + "e30": 2.0, + "e31": 2.0, + "e32": 2.0, + "e33": 2.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "8764669016f6442f8152593c18a649d7", + "m_Id": 4, + "m_DisplayName": "RGBA", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "RGBA", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicValueMaterialSlot", + "m_ObjectId": "880bb02c6c6b49b18aa6ebc66dc566a0", + "m_Id": 0, + "m_DisplayName": "A", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 3, + "m_Value": { + "e00": 0.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 0.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 0.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 0.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.CustomFunctionNode", + "m_ObjectId": "88253223d2c34ecfab92b0c344048f94", + "m_Group": { + "m_Id": "484b51c50485473b819c4f05087b32d7" + }, + "m_Name": "ComputeSDF (Custom Function)", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4226.0, + "y": -4323.0, + "width": 227.99998474121095, + "height": 190.0 + } + }, + "m_Slots": [ + { + "m_Id": "c52a1744a9a14989b0ae452ad6de6061" + }, + { + "m_Id": "a03db80c558b4f87a330c5ae0a9443a5" + }, + { + "m_Id": "8f1b1d1e8ff24b3284993e52354e54fa" + }, + { + "m_Id": "5da82bf481f8489ebd05e997f617f51b" + }, + { + "m_Id": "82d5443fe54d4a3b9420f8745d00a632" + }, + { + "m_Id": "61133d79a89048c195f54939b2a1d30a" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SourceType": 0, + "m_FunctionName": "ComputeSDF", + "m_FunctionSource": "96de908384869cd409c75efa351d5edf", + "m_FunctionBody": "Enter function body here..." +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector2MaterialSlot", + "m_ObjectId": "8a08179f99d649d289b8053d5fa0ad22", + "m_Id": 0, + "m_DisplayName": "Underlay Offset", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0 + }, + "m_Labels": [ + "X", + "Y" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "8b66f4e6bc9d4662b3218ac33a69839f", + "m_Id": 5, + "m_DisplayName": "G", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "G", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "8c38a5d8327f456e9783740c05382619", + "m_Id": 3, + "m_DisplayName": "Color2", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Color2", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "8cbd81814903479ea1d3151c1f38183e", + "m_Id": 6, + "m_DisplayName": "B", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 3, + "m_Type": "UnityEditor.ShaderGraph.Internal.ColorShaderProperty", + "m_ObjectId": "8cf8aae64c1d443f9303126886b40f17", + "m_Guid": { + "m_GuidSerialized": "8d78c9a5-aaef-41fb-af68-2358e401d7ac" + }, + "m_Name": "_UnderlayColor", + "m_DefaultReferenceName": "Color_2F5FE804", + "m_OverrideReferenceName": "_UnderlayColor", + "m_GeneratePropertyBlock": true, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": { + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 1.0 + }, + "m_ColorMode": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector2MaterialSlot", + "m_ObjectId": "8e6ed600f6504f4083092f5b511e44c4", + "m_Id": 0, + "m_DisplayName": "UV", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "UV", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0 + }, + "m_Labels": [ + "X", + "Y" + ] +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.Internal.Vector2ShaderProperty", + "m_ObjectId": "8ed907a2cc7949b68a283ae243ea1977", + "m_Guid": { + "m_GuidSerialized": "36803443-a9bc-4f3c-a4f2-7d66a5417ac1" + }, + "m_Name": "Outline Offset 3", + "m_DefaultReferenceName": "", + "m_OverrideReferenceName": "_OutlineOffset3", + "m_GeneratePropertyBlock": true, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "8f1b1d1e8ff24b3284993e52354e54fa", + "m_Id": 3, + "m_DisplayName": "SDR", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "SDR", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "9147636b0cfa466a9b37a013d8f693bf", + "m_Group": { + "m_Id": "daaf032a109749a88c9b8ff8e1f8b541" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -5421.99951171875, + "y": -3902.0, + "width": 153.0, + "height": 34.0 + } + }, + "m_Slots": [ + { + "m_Id": "a4f471e3221c4134b291bd9d2ba22db6" + } + ], + "synonyms": [], + "m_Precision": 1, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "a6bbb32e8d884be9bb36db91fe4b81b1" + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "9178663316db43d582f1c4a127d307c6", + "m_Id": 2, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.SplitNode", + "m_ObjectId": "91890fe48ebe4717aea61ecaf3ad4861", + "m_Group": { + "m_Id": "ecf16c34d46f4502ac601f0c38c7576b" + }, + "m_Name": "Split", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -2983.000244140625, + "y": -3468.0, + "width": 119.99999237060547, + "height": 149.0 + } + }, + "m_Slots": [ + { + "m_Id": "3dccd64e7f324bc1a75c1479d7a67c51" + }, + { + "m_Id": "e444f2c81d1e48329fa2c91005277e8d" + }, + { + "m_Id": "b2c26292b7434733878a9b042f44de89" + }, + { + "m_Id": "964fea1fd4b24f4daf5bef84c4b45118" + }, + { + "m_Id": "deac82280a2b43078e0e40863e2d974c" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "91d6a9a5fbc04ea49075cb51835e7264", + "m_Id": 2, + "m_DisplayName": "B", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "928621a3ca2d41c89a10336bbbc81ddc", + "m_Id": 5, + "m_DisplayName": "G", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "G", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "93b161cce4504cb79c97b6d8db178de7", + "m_Id": 3, + "m_DisplayName": "TextureSize", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "TextureSize", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "945b45993dd84a979755b98c48138f72", + "m_Id": 0, + "m_DisplayName": "Width", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Width", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.Internal.Vector1ShaderProperty", + "m_ObjectId": "952d0fa5cd744df0b434cd38e9a90b93", + "m_Guid": { + "m_GuidSerialized": "ce395871-ddeb-47c3-a31d-07855800c197" + }, + "m_Name": "_UnderlaySoftness", + "m_DefaultReferenceName": "Vector1_F2B9E3EF", + "m_OverrideReferenceName": "_UnderlaySoftness", + "m_GeneratePropertyBlock": true, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": 0.0, + "m_FloatType": 0, + "m_RangeValues": { + "x": 0.0, + "y": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "95928bcb6a284b8d88105a84c2e1d3ce", + "m_Group": { + "m_Id": "013228b0fdf1424097798f0973a9a4fb" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4788.0, + "y": -2591.0, + "width": 155.0, + "height": 34.0 + } + }, + "m_Slots": [ + { + "m_Id": "d880558893fb442b9320cf55885d1117" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "2d0a269511e34bd1ba9056d2c939dff2" + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "964fea1fd4b24f4daf5bef84c4b45118", + "m_Id": 3, + "m_DisplayName": "B", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.GroupData", + "m_ObjectId": "98934a69591249d5b8b92b39045359a3", + "m_Title": "Outline1 Texture", + "m_Position": { + "x": -4670.00048828125, + "y": -2474.0 + } +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.Internal.Vector1ShaderProperty", + "m_ObjectId": "998db5e5901e45b29040eb2099370071", + "m_Guid": { + "m_GuidSerialized": "6f383614-f2ad-4269-be8f-87b0ecb03cf0" + }, + "m_Name": "Bevel Clamp", + "m_DefaultReferenceName": "Vector1_5BD7E808", + "m_OverrideReferenceName": "_BevelClamp", + "m_GeneratePropertyBlock": true, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": 0.0, + "m_FloatType": 1, + "m_RangeValues": { + "x": 0.0, + "y": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.SampleTexture2DNode", + "m_ObjectId": "9c228fac287d446296b91a4acf5cec59", + "m_Group": { + "m_Id": "42cadae0923e4969b50bbc3f78185934" + }, + "m_Name": "Sample Texture 2D", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4600.0, + "y": -3498.0, + "width": 183.99998474121095, + "height": 253.0 + } + }, + "m_Slots": [ + { + "m_Id": "582d6e289dbe4fdca7cf0307273eaa2f" + }, + { + "m_Id": "1db37082bf844442804487b4944352de" + }, + { + "m_Id": "8b66f4e6bc9d4662b3218ac33a69839f" + }, + { + "m_Id": "4a66dcbe712a4d40bd8f355b834594b5" + }, + { + "m_Id": "a0285c9c381a49cba194709efa0a7c85" + }, + { + "m_Id": "b2728d0dd3ce40678867c94a7d977916" + }, + { + "m_Id": "e141833aa78b4fd59ecad949beb43a78" + }, + { + "m_Id": "51f76f8a53ad43a4ad028426548ce9ba" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_TextureType": 0, + "m_NormalMapSpace": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "9c26fdddba244d36a854298c00473247", + "m_Id": 3, + "m_DisplayName": "SDR", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "SDR", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.UVNode", + "m_ObjectId": "9d3c3383d5934a17bf9efbb7fd9e9043", + "m_Group": { + "m_Id": "42cadae0923e4969b50bbc3f78185934" + }, + "m_Name": "UV", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -5443.0, + "y": -3315.0, + "width": 144.99998474121095, + "height": 130.0 + } + }, + "m_Slots": [ + { + "m_Id": "232b1aa09e67479abae141d3c76d3c5b" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_OutputChannel": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "9e6e50a71d9843b49b62ebe1cf7d3d59", + "m_Group": { + "m_Id": "d258902c6ec74942afdb9ebf8c1d07f8" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4486.0, + "y": -3865.99951171875, + "width": 135.3330078125, + "height": 33.999996185302737 + } + }, + "m_Slots": [ + { + "m_Id": "3535ae87c6dd4769b52b20d9eca61069" + } + ], + "synonyms": [], + "m_Precision": 1, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "3e372195f4bd4845852a37839e5b602d" + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "9e87ce9607e14015a3790c528ca5dfda", + "m_Group": { + "m_Id": "98934a69591249d5b8b92b39045359a3" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4635.0, + "y": -2239.0, + "width": 167.0, + "height": 34.0 + } + }, + "m_Slots": [ + { + "m_Id": "75c5657544c648058b20cea090f48dbf" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "3fdf4b7bc5d4426492dcc057603ef4a6" + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicValueMaterialSlot", + "m_ObjectId": "9eb8137a6c2e41bbafdc8b0732dd47a3", + "m_Id": 0, + "m_DisplayName": "A", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 3, + "m_Value": { + "e00": 0.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 0.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 0.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 0.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BooleanMaterialSlot", + "m_ObjectId": "9eeec1a9713045af8845cea263d5ea48", + "m_Id": 6, + "m_DisplayName": "IsFront", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "IsFront", + "m_StageCapability": 3, + "m_Value": false, + "m_DefaultValue": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.MultiplyNode", + "m_ObjectId": "9f0de188085746d5a19073da1de85ddb", + "m_Group": { + "m_Id": "013228b0fdf1424097798f0973a9a4fb" + }, + "m_Name": "Multiply", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4160.0, + "y": -2771.0, + "width": 130.0, + "height": 117.99999237060547 + } + }, + "m_Slots": [ + { + "m_Id": "7c27ccb2c2dc4ca59c5438c3358630ca" + }, + { + "m_Id": "373f1de8db6c429c9d46c781f741d7a4" + }, + { + "m_Id": "fd0b096ed5b74f9e9ec51327be200731" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "a0285c9c381a49cba194709efa0a7c85", + "m_Id": 7, + "m_DisplayName": "A", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "a03db80c558b4f87a330c5ae0a9443a5", + "m_Id": 1, + "m_DisplayName": "SD", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "SD", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.NormalMaterialSlot", + "m_ObjectId": "a3f8b6e8ae7f48e2989a029904401502", + "m_Id": 0, + "m_DisplayName": "Normal", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Normal", + "m_StageCapability": 1, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [ + "X", + "Y", + "Z" + ], + "m_Space": 0 +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.CustomFunctionNode", + "m_ObjectId": "a455bd79094c4413a7b7dd80ca8b9368", + "m_Group": { + "m_Id": "013228b0fdf1424097798f0973a9a4fb" + }, + "m_Name": "GenerateUV (Custom Function)", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4606.99951171875, + "y": -2689.0, + "width": 221.99998474121095, + "height": 142.0 + } + }, + "m_Slots": [ + { + "m_Id": "dcd51c93d3b64f05a938b3334f343654" + }, + { + "m_Id": "2c7a9460724b47daad8df1be144de7c6" + }, + { + "m_Id": "55ffa45ec3654d5e88089fb40d2b0465" + }, + { + "m_Id": "e495a9f7a11f4eb89334e83be154ceb9" + } + ], + "synonyms": [], + "m_Precision": 1, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SourceType": 0, + "m_FunctionName": "GenerateUV", + "m_FunctionSource": "96de908384869cd409c75efa351d5edf", + "m_FunctionBody": "Enter function body here..." +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.SamplerStateShaderProperty", + "m_ObjectId": "a4ad98d8828c424384229c344ebe2ed0", + "m_Guid": { + "m_GuidSerialized": "f98fc1a2-bb81-4bd1-a207-23d3a90d518e" + }, + "m_Name": "SamplerState", + "m_DefaultReferenceName": "", + "m_OverrideReferenceName": "SamplerState_Linear_Clamp", + "m_GeneratePropertyBlock": false, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": { + "m_filter": 0, + "m_wrap": 1 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "a4f471e3221c4134b291bd9d2ba22db6", + "m_Id": 0, + "m_DisplayName": "_GradientScale", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "a535f3bcbeb14622bb177eb6f46e76f4", + "m_Group": { + "m_Id": "98934a69591249d5b8b92b39045359a3" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4645.00048828125, + "y": -2285.0, + "width": 177.00001525878907, + "height": 34.0 + } + }, + "m_Slots": [ + { + "m_Id": "6dfc1177dd0541a7a780fbf911ad1956" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "ec79eb447dfd47a9b3380344c6a60f43" + } +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.Internal.Vector1ShaderProperty", + "m_ObjectId": "a6bbb32e8d884be9bb36db91fe4b81b1", + "m_Guid": { + "m_GuidSerialized": "6aa76edf-7b80-46ac-add4-406cf1d85493" + }, + "m_Name": "_GradientScale", + "m_DefaultReferenceName": "Vector1_EAE27356", + "m_OverrideReferenceName": "_GradientScale", + "m_GeneratePropertyBlock": true, + "m_Precision": 1, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": 10.0, + "m_FloatType": 0, + "m_RangeValues": { + "x": 0.0, + "y": 1.0 + } +} + +{ + "m_SGVersion": 3, + "m_Type": "UnityEditor.ShaderGraph.Internal.ColorShaderProperty", + "m_ObjectId": "a6c38edd2e8743a9b057ba8452b9f129", + "m_Guid": { + "m_GuidSerialized": "9fc942ee-4a1d-4ced-a5a6-81893e3ddb63" + }, + "m_Name": "Light Color", + "m_DefaultReferenceName": "Color_a6c38edd2e8743a9b057ba8452b9f129", + "m_OverrideReferenceName": "_SpecularColor", + "m_GeneratePropertyBlock": true, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": { + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "m_ColorMode": 1 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "a75f7ac601c446469802fe7754c1f279", + "m_Id": 0, + "m_DisplayName": "Color1", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Color1", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "a7942746b5564dc7bbbae1deb2403022", + "m_Id": 0, + "m_DisplayName": "_GradientScale", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicValueMaterialSlot", + "m_ObjectId": "a7c06457d7454693a8bc3dc95257b2c2", + "m_Id": 2, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "e00": 0.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 0.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 0.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 0.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "aa2794b8f0e24bf281d22e0fef0647be", + "m_Id": 2, + "m_DisplayName": "B", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.CustomFunctionNode", + "m_ObjectId": "aa3e347d733e48f7b65d8a8847370eec", + "m_Group": { + "m_Id": "" + }, + "m_Name": "EvaluateLight (Custom Function)", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -3631.0, + "y": -3810.0, + "width": 230.0, + "height": 118.0 + } + }, + "m_Slots": [ + { + "m_Id": "0699eea947fc426cbfeb8744cf120222" + }, + { + "m_Id": "0c4dc51f26484c26ad88a3fe4002abcd" + }, + { + "m_Id": "d5173cc3c6cd4f1998550f3187a3e9c8" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SourceType": 0, + "m_FunctionName": "EvaluateLight", + "m_FunctionSource": "96de908384869cd409c75efa351d5edf", + "m_FunctionBody": "Enter function body here..." +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "aa87c72ac0e64469acc34f936f00b3d0", + "m_Group": { + "m_Id": "484b51c50485473b819c4f05087b32d7" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4444.0, + "y": -4225.0, + "width": 193.0, + "height": 34.0 + } + }, + "m_Slots": [ + { + "m_Id": "0d7878dd226d4cfb81a991dc312309fc" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "81e8ed0534534674a74263e6161a2a1a" + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "abd59150589b436cadf8c9e6f43ccb8e", + "m_Id": 0, + "m_DisplayName": "RGBA", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "RGBA", + "m_StageCapability": 2, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BlockNode", + "m_ObjectId": "aca823a8188948c782eddaf0f45e1868", + "m_Group": { + "m_Id": "" + }, + "m_Name": "SurfaceDescription.NormalOS", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -2542.0, + "y": -3404.000244140625, + "width": 200.0, + "height": 40.66650390625 + } + }, + "m_Slots": [ + { + "m_Id": "e386b183a18245a796b024022f7f3074" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SerializedDescriptor": "SurfaceDescription.NormalOS" +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Texture2DPropertiesNode", + "m_ObjectId": "acd0cd5a177f4a97bf23db7219305e3f", + "m_Group": { + "m_Id": "d258902c6ec74942afdb9ebf8c1d07f8" + }, + "m_Name": "Texel Size", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4348.0, + "y": -3905.99951171875, + "width": 185.33299255371095, + "height": 101.33324432373047 + } + }, + "m_Slots": [ + { + "m_Id": "945b45993dd84a979755b98c48138f72" + }, + { + "m_Id": "e51a636b2621440eb94cc802c1cf4bfc" + }, + { + "m_Id": "1bdde3efd3b7464b8934c555be0f8a48" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "ada023d617104472b8ab75a81558c0a1", + "m_Id": 0, + "m_DisplayName": "Outline Color 3", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "aef5c44f84e04c3185e0b93e95e34204", + "m_Group": { + "m_Id": "42cadae0923e4969b50bbc3f78185934" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -5264.99951171875, + "y": -3142.0, + "width": 159.0, + "height": 34.0 + } + }, + "m_Slots": [ + { + "m_Id": "84dc74cdbd8c45e1b189e4fd9a69942d" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "8ed907a2cc7949b68a283ae243ea1977" + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Texture2DInputMaterialSlot", + "m_ObjectId": "b000f852aa984e9dae25b125a4607f4e", + "m_Id": 1, + "m_DisplayName": "Texture", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Texture", + "m_StageCapability": 3, + "m_BareResource": false, + "m_Texture": { + "m_SerializedTexture": "{\"texture\":{\"instanceID\":0}}", + "m_Guid": "" + }, + "m_DefaultType": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "b015d1b7e4134c59baf6851e7649802c", + "m_Id": 0, + "m_DisplayName": "R", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "R", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.Internal.Vector1ShaderProperty", + "m_ObjectId": "b0b352c4503a43d083a64e57352b29a0", + "m_Guid": { + "m_GuidSerialized": "01cfcc78-60aa-4f71-a1e3-8d8df6dae253" + }, + "m_Name": "Reflectivity Power", + "m_DefaultReferenceName": "Vector1_b0b352c4503a43d083a64e57352b29a0", + "m_OverrideReferenceName": "_Reflectivity", + "m_GeneratePropertyBlock": true, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": 5.0, + "m_FloatType": 1, + "m_RangeValues": { + "x": 5.0, + "y": 15.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.VertexColorNode", + "m_ObjectId": "b1188549725543d485436c2e921ffbb2", + "m_Group": { + "m_Id": "013228b0fdf1424097798f0973a9a4fb" + }, + "m_Name": "Vertex Color", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4146.0, + "y": -2869.0, + "width": 116.0, + "height": 94.0 + } + }, + "m_Slots": [ + { + "m_Id": "281bcee4777040f8a31ee0e10344e98d" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 2, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.SampleTexture2DNode", + "m_ObjectId": "b163c9f1666644b0bba62cf0e12df7bc", + "m_Group": { + "m_Id": "013228b0fdf1424097798f0973a9a4fb" + }, + "m_Name": "Sample Texture 2D", + "m_DrawState": { + "m_Expanded": false, + "m_Position": { + "serializedVersion": "2", + "x": -4367.0, + "y": -2713.0, + "width": 180.0, + "height": 181.0 + } + }, + "m_Slots": [ + { + "m_Id": "cce40479b6284b6fa3174db9f09d0ac9" + }, + { + "m_Id": "80e665a5eeb64730a51742f698bf0d48" + }, + { + "m_Id": "1f46181633594ae0a1fb2adb76b42981" + }, + { + "m_Id": "8cbd81814903479ea1d3151c1f38183e" + }, + { + "m_Id": "cfaf3f3a5a1146e194cddad30c95aada" + }, + { + "m_Id": "b43489e37a5c4df88f15844292a55ec7" + }, + { + "m_Id": "cd7281fb41aa4e61ac0fdf71d4f4bd46" + }, + { + "m_Id": "f01d52cdcb1647aab35782b4af535efd" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_TextureType": 0, + "m_NormalMapSpace": 1 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicValueMaterialSlot", + "m_ObjectId": "b224a1cf80604103ad085c799995f3c2", + "m_Id": 2, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "e00": 0.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 0.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 0.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 0.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Texture2DInputMaterialSlot", + "m_ObjectId": "b2728d0dd3ce40678867c94a7d977916", + "m_Id": 1, + "m_DisplayName": "Texture", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Texture", + "m_StageCapability": 3, + "m_BareResource": false, + "m_Texture": { + "m_SerializedTexture": "{\"texture\":{\"fileID\":-2362172177983852347,\"guid\":\"dda5bcb0d1e9515498f6e4e038bbefe6\",\"type\":2}}", + "m_Guid": "" + }, + "m_DefaultType": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "b2baf44eae52473cb6cda7b1debece01", + "m_Id": 0, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "b2c26292b7434733878a9b042f44de89", + "m_Id": 2, + "m_DisplayName": "G", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "G", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "b42e6dbfbc864097af182cbff5c0c1fb", + "m_Id": 0, + "m_DisplayName": "Outline Color 1", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Texture2DInputMaterialSlot", + "m_ObjectId": "b43489e37a5c4df88f15844292a55ec7", + "m_Id": 1, + "m_DisplayName": "Texture", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Texture", + "m_StageCapability": 3, + "m_BareResource": false, + "m_Texture": { + "m_SerializedTexture": "{\"texture\":{\"fileID\":-2362172177983852347,\"guid\":\"dda5bcb0d1e9515498f6e4e038bbefe6\",\"type\":2}}", + "m_Guid": "" + }, + "m_DefaultType": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.MultiplyNode", + "m_ObjectId": "b4a40cb6acd441acb83cfe0240bf910d", + "m_Group": { + "m_Id": "484b51c50485473b819c4f05087b32d7" + }, + "m_Name": "Multiply", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4750.99951171875, + "y": -4274.0, + "width": 130.0, + "height": 118.0 + } + }, + "m_Slots": [ + { + "m_Id": "d0b10e52e21941b183f5f635894c76c8" + }, + { + "m_Id": "0d6a57754b824f6db9cefa6953bc06a9" + }, + { + "m_Id": "773b90134e894e429203c0c83e80b9de" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Texture2DPropertiesNode", + "m_ObjectId": "b571db753a1948d5a6f1de4e7d0c7238", + "m_Group": { + "m_Id": "daaf032a109749a88c9b8ff8e1f8b541" + }, + "m_Name": "Texel Size", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -5581.99951171875, + "y": -3867.0, + "width": 183.99998474121095, + "height": 100.99999237060547 + } + }, + "m_Slots": [ + { + "m_Id": "5b3ff4ee364f4d7a923b530ad60d8762" + }, + { + "m_Id": "c183b5bd9bbe45089f93996e73110918" + }, + { + "m_Id": "1196ae398cc348349ab0c1a23fdab4bd" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "b691728a389a417d9b4f2d02541209c2", + "m_Id": 6, + "m_DisplayName": "B", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "b7f9ac55517141868bfb9d2ad6429792", + "m_Id": 6, + "m_DisplayName": "B", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "b85d677872b44421bf5536f42ba0267c", + "m_Id": 3, + "m_DisplayName": "Color0", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Color0", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.CombineNode", + "m_ObjectId": "bc9afcb18afa4ccc82d2cdc34d3f4641", + "m_Group": { + "m_Id": "daaf032a109749a88c9b8ff8e1f8b541" + }, + "m_Name": "Combine", + "m_DrawState": { + "m_Expanded": false, + "m_Position": { + "serializedVersion": "2", + "x": -5392.0, + "y": -3867.0, + "width": 125.99999237060547, + "height": 118.0 + } + }, + "m_Slots": [ + { + "m_Id": "5e42524569844befad16fda5a94eb9cb" + }, + { + "m_Id": "54d7a93ffec5490aa4591da23a21b693" + }, + { + "m_Id": "aa2794b8f0e24bf281d22e0fef0647be" + }, + { + "m_Id": "200245fc8bbe4826b209ab5f7ffe074c" + }, + { + "m_Id": "fc2e62201c5847e798fd939314413fcd" + }, + { + "m_Id": "fe11fa80cc1847a5a37f6757d521cf25" + }, + { + "m_Id": "de0c6f7f7af94defa6c3dbc6433de9d4" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "c183b5bd9bbe45089f93996e73110918", + "m_Id": 2, + "m_DisplayName": "Height", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Height", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.CustomFunctionNode", + "m_ObjectId": "c234e5216678436195ee1a5914bc79da", + "m_Group": { + "m_Id": "98934a69591249d5b8b92b39045359a3" + }, + "m_Name": "GenerateUV (Custom Function)", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4446.0, + "y": -2347.0, + "width": 222.0, + "height": 142.0 + } + }, + "m_Slots": [ + { + "m_Id": "f68d9dee5cbc43cdb355d8fadae602d3" + }, + { + "m_Id": "3db1608e927e4102a3c3a88e9fcab39a" + }, + { + "m_Id": "0f7ffb6d2de4447f9736780cbcee8e07" + }, + { + "m_Id": "d4954b7bbbb0412cbc997bcbe7dfa808" + } + ], + "synonyms": [], + "m_Precision": 1, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SourceType": 0, + "m_FunctionName": "GenerateUV", + "m_FunctionSource": "96de908384869cd409c75efa351d5edf", + "m_FunctionBody": "Enter function body here..." +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.UVMaterialSlot", + "m_ObjectId": "c35312edaa2344788b1964ee2f63a236", + "m_Id": 2, + "m_DisplayName": "UV", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "UV", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0 + }, + "m_Labels": [], + "m_Channel": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Texture2DMaterialSlot", + "m_ObjectId": "c3e6d7c20c184bf39fd8822130e693e7", + "m_Id": 0, + "m_DisplayName": "_MainTex", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_BareResource": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector2MaterialSlot", + "m_ObjectId": "c422a9a9ff824176aad2241f58c44d0b", + "m_Id": 0, + "m_DisplayName": "Outline Offset 1", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "c478c32c45884c57a62f7b2aa8ddc3b0", + "m_Id": 2, + "m_DisplayName": "Alpha", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Alpha", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "c52a1744a9a14989b0ae452ad6de6061", + "m_Id": 0, + "m_DisplayName": "SSR", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "SSR", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "c6bdb985bc16435fa72f5a3c81bb633c", + "m_Id": 6, + "m_DisplayName": "B", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "c7d4094601ac4bc1aead609c72b1f1c1", + "m_Id": 4, + "m_DisplayName": "R", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "R", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "c7ddee91dc5b48dc828309c77fdb0b88", + "m_Group": { + "m_Id": "484b51c50485473b819c4f05087b32d7" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4444.0, + "y": -4266.0, + "width": 153.0, + "height": 34.0 + } + }, + "m_Slots": [ + { + "m_Id": "a7942746b5564dc7bbbae1deb2403022" + } + ], + "synonyms": [], + "m_Precision": 1, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "a6bbb32e8d884be9bb36db91fe4b81b1" + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.SamplerStateMaterialSlot", + "m_ObjectId": "c88fcbaeea954a5f9c68c339fa8b604d", + "m_Id": 3, + "m_DisplayName": "Sampler", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Sampler", + "m_StageCapability": 3, + "m_BareResource": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "c9b722d107ce4cd6a748c883472b9b0f", + "m_Id": 7, + "m_DisplayName": "A", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "c9d7f0dbae7d422985a1cc87c025e76b", + "m_Group": { + "m_Id": "42cadae0923e4969b50bbc3f78185934" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4315.0, + "y": -3165.0, + "width": 144.0, + "height": 34.0 + } + }, + "m_Slots": [ + { + "m_Id": "79147f6986644769b58d9ed64fe771e1" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "cb3c0c3f08654b068bea44c4ffb15f4a" + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Internal.Texture2DShaderProperty", + "m_ObjectId": "c9ec735d1a1046769e5601b2c97c849a", + "m_Guid": { + "m_GuidSerialized": "281a9526-c332-4471-a44e-ece4a1e95ef6" + }, + "m_Name": "Face Texture", + "m_DefaultReferenceName": "Texture2D_75569DEA", + "m_OverrideReferenceName": "_FaceTex", + "m_GeneratePropertyBlock": true, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": { + "m_SerializedTexture": "{\"texture\":{\"instanceID\":0}}", + "m_Guid": "" + }, + "m_Modifiable": true, + "m_DefaultType": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "ca2a1083dc014f39ab8af0cdf140866b", + "m_Id": 0, + "m_DisplayName": "_FaceTexture_ST", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Internal.BooleanShaderProperty", + "m_ObjectId": "cb3c0c3f08654b068bea44c4ffb15f4a", + "m_Guid": { + "m_GuidSerialized": "21009d12-8d94-4273-b0d0-a8ee0608ddcf" + }, + "m_Name": "OutlineMode", + "m_DefaultReferenceName": "Boolean_cb3c0c3f08654b068bea44c4ffb15f4a", + "m_OverrideReferenceName": "_OutlineMode", + "m_GeneratePropertyBlock": true, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.SamplerStateMaterialSlot", + "m_ObjectId": "cb5e9f9567e84f8fa5463efc0e256e19", + "m_Id": 3, + "m_DisplayName": "Sampler", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Sampler", + "m_StageCapability": 3, + "m_BareResource": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BlockNode", + "m_ObjectId": "cb7117ecb1d047a8b2cb00ed552cb181", + "m_Group": { + "m_Id": "" + }, + "m_Name": "SurfaceDescription.Alpha", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -3032.66650390625, + "y": -3029.33349609375, + "width": 200.0, + "height": 41.33349609375 + } + }, + "m_Slots": [ + { + "m_Id": "724e17584e97443e9e285dfa7253c8e3" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SerializedDescriptor": "SurfaceDescription.Alpha" +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "cc88101667c9488f9c5a716e851c1b21", + "m_Id": 3, + "m_DisplayName": "Color0", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Color0", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "cce40479b6284b6fa3174db9f09d0ac9", + "m_Id": 0, + "m_DisplayName": "RGBA", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "RGBA", + "m_StageCapability": 2, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.UVMaterialSlot", + "m_ObjectId": "cd7281fb41aa4e61ac0fdf71d4f4bd46", + "m_Id": 2, + "m_DisplayName": "UV", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "UV", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0 + }, + "m_Labels": [ + "X", + "Y" + ], + "m_Channel": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.SamplerStateMaterialSlot", + "m_ObjectId": "cda5e3b4c1054bf3a65c0b7ec6bc778a", + "m_Id": 3, + "m_DisplayName": "Sampler", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Sampler", + "m_StageCapability": 3, + "m_BareResource": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.SampleTexture2DNode", + "m_ObjectId": "cdddee3a537c464697357f11b966f9b8", + "m_Group": { + "m_Id": "484b51c50485473b819c4f05087b32d7" + }, + "m_Name": "Sample Texture 2D", + "m_DrawState": { + "m_Expanded": false, + "m_Position": { + "serializedVersion": "2", + "x": -4420.0, + "y": -4483.0, + "width": 156.0, + "height": 181.0 + } + }, + "m_Slots": [ + { + "m_Id": "41b9b79b3859472882bcea393703eec0" + }, + { + "m_Id": "c7d4094601ac4bc1aead609c72b1f1c1" + }, + { + "m_Id": "767769f736d5478cba5f10a415e28e7f" + }, + { + "m_Id": "b691728a389a417d9b4f2d02541209c2" + }, + { + "m_Id": "045c4f6b050549c7a0efb208e6349779" + }, + { + "m_Id": "509e6f38505b4b0695b263706a55028f" + }, + { + "m_Id": "204dacb5a95b424facf11cb6f65bd188" + }, + { + "m_Id": "35cbea6373dd4e4f8d0fea36e8add392" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_TextureType": 0, + "m_NormalMapSpace": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "cfaf3f3a5a1146e194cddad30c95aada", + "m_Id": 7, + "m_DisplayName": "A", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.GroupData", + "m_ObjectId": "d0a791a544614667962a9a9a9ce0c68a", + "m_Title": "Screen Space Ratio", + "m_Position": { + "x": -6179.99951171875, + "y": -3422.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicValueMaterialSlot", + "m_ObjectId": "d0b10e52e21941b183f5f635894c76c8", + "m_Id": 0, + "m_DisplayName": "A", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 3, + "m_Value": { + "e00": 0.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 0.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 0.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 0.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "d1a17e42e7a04dc38984e3c01149445b", + "m_Id": 7, + "m_DisplayName": "A", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "d219977210094c0082c517d8dc00c8bb", + "m_Id": 0, + "m_DisplayName": "RGBA", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "RGBA", + "m_StageCapability": 2, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.GroupData", + "m_ObjectId": "d258902c6ec74942afdb9ebf8c1d07f8", + "m_Title": "Generate Normal", + "m_Position": { + "x": -4511.33349609375, + "y": -3999.3330078125 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.UVMaterialSlot", + "m_ObjectId": "d30452ac6b244ecca03df4d7b4de9f81", + "m_Id": 2, + "m_DisplayName": "UV", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "UV", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0 + }, + "m_Labels": [], + "m_Channel": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "d48c3871e3064027a10ae9f4babd3be0", + "m_Id": 0, + "m_DisplayName": "_UnderlaySoftness", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector2MaterialSlot", + "m_ObjectId": "d4954b7bbbb0412cbc997bcbe7dfa808", + "m_Id": 2, + "m_DisplayName": "UV", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "UV", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0 + }, + "m_Labels": [ + "X", + "Y" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "d4df208fc23b42f2b52364124f1b661c", + "m_Group": { + "m_Id": "42cadae0923e4969b50bbc3f78185934" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -5268.0, + "y": -3261.0, + "width": 159.0, + "height": 34.0 + } + }, + "m_Slots": [ + { + "m_Id": "757174b6f25040fdbb20355a21752222" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "74b41464cbed4e9e8e23af5ab9be40cf" + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector3MaterialSlot", + "m_ObjectId": "d5173cc3c6cd4f1998550f3187a3e9c8", + "m_Id": 0, + "m_DisplayName": "Normal", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Normal", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [ + "X", + "Y", + "Z" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "d6a6a119394e4082a11bc024a6e42ef8", + "m_Id": 0, + "m_DisplayName": "Outline Color 2", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector2MaterialSlot", + "m_ObjectId": "d880558893fb442b9320cf55885d1117", + "m_Id": 0, + "m_DisplayName": "_FaceUVSpeed", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0 + }, + "m_Labels": [ + "X", + "Y" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "d8edec16956c4f15b7d51d6ec10753f4", + "m_Id": 2, + "m_DisplayName": "B", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicValueMaterialSlot", + "m_ObjectId": "d9bcb754db834583b6518c5ed5152114", + "m_Id": 0, + "m_DisplayName": "A", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 3, + "m_Value": { + "e00": 0.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 0.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 0.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 0.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "d9dc4839ee2847999110bdb234d6041a", + "m_Id": 1, + "m_DisplayName": "G", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "G", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Texture2DMaterialSlot", + "m_ObjectId": "da7a06d393a44089842070d51d2aa0a6", + "m_Id": 0, + "m_DisplayName": "_MainTex", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_BareResource": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.GroupData", + "m_ObjectId": "daaf032a109749a88c9b8ff8e1f8b541", + "m_Title": "Offset Scale", + "m_Position": { + "x": -5747.99951171875, + "y": -3961.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.UVNode", + "m_ObjectId": "dbcb748279484a4590e53518c49122b8", + "m_Group": { + "m_Id": "013228b0fdf1424097798f0973a9a4fb" + }, + "m_Name": "UV", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4778.0, + "y": -2771.0, + "width": 145.0, + "height": 130.0 + } + }, + "m_Slots": [ + { + "m_Id": "7a0f504e4175406dbd8134250f4e350b" + } + ], + "synonyms": [], + "m_Precision": 1, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_OutputChannel": 1 +} + +{ + "m_SGVersion": 3, + "m_Type": "UnityEditor.ShaderGraph.Internal.ColorShaderProperty", + "m_ObjectId": "dc75c4e3a1bc4bb0a128086c2b0679a5", + "m_Guid": { + "m_GuidSerialized": "85cd941f-2fd2-43a3-b0fa-9f728bfb4220" + }, + "m_Name": "Face Color", + "m_DefaultReferenceName": "Color_99AFBB3D", + "m_OverrideReferenceName": "_FaceColor", + "m_GeneratePropertyBlock": true, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": { + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "m_ColorMode": 1 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector2MaterialSlot", + "m_ObjectId": "dcd51c93d3b64f05a938b3334f343654", + "m_Id": 0, + "m_DisplayName": "UV_1", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "UV_1", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector2MaterialSlot", + "m_ObjectId": "de0c6f7f7af94defa6c3dbc6433de9d4", + "m_Id": 6, + "m_DisplayName": "RG", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "RG", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "deac82280a2b43078e0e40863e2d974c", + "m_Id": 4, + "m_DisplayName": "A", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Texture2DMaterialSlot", + "m_ObjectId": "def8e0b9d8384982bc5b4c32d877e458", + "m_Id": 0, + "m_DisplayName": "Outline Texture", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_BareResource": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.SubtractNode", + "m_ObjectId": "dff7a66b353a4023b29c9d937da77960", + "m_Group": { + "m_Id": "484b51c50485473b819c4f05087b32d7" + }, + "m_Name": "Subtract", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4602.0, + "y": -4298.0, + "width": 130.0, + "height": 118.0 + } + }, + "m_Slots": [ + { + "m_Id": "7b8a19bd115e4167a25b59cb3218a817" + }, + { + "m_Id": "0b57f2d35157477ab2b29a5aac14ae8b" + }, + { + "m_Id": "e9e06fcb161e44ba8cc9f6f60264df78" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.UVMaterialSlot", + "m_ObjectId": "e141833aa78b4fd59ecad949beb43a78", + "m_Id": 2, + "m_DisplayName": "UV", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "UV", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0 + }, + "m_Labels": [ + "X", + "Y" + ], + "m_Channel": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "e2d28f29bbac4983a401574480b5ca28", + "m_Id": 1, + "m_DisplayName": "R", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "R", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.NormalMaterialSlot", + "m_ObjectId": "e386b183a18245a796b024022f7f3074", + "m_Id": 0, + "m_DisplayName": "Normal (Object Space)", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "NormalOS", + "m_StageCapability": 2, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [ + "X", + "Y", + "Z" + ], + "m_Space": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "e444f2c81d1e48329fa2c91005277e8d", + "m_Id": 1, + "m_DisplayName": "R", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "R", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector2MaterialSlot", + "m_ObjectId": "e495a9f7a11f4eb89334e83be154ceb9", + "m_Id": 2, + "m_DisplayName": "UV", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "UV", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0 + }, + "m_Labels": [ + "X", + "Y" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "e51a636b2621440eb94cc802c1cf4bfc", + "m_Id": 2, + "m_DisplayName": "Height", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Height", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BlockNode", + "m_ObjectId": "e591df3a1eb94e259b762f2830b407e2", + "m_Group": { + "m_Id": "" + }, + "m_Name": "SurfaceDescription.Emission", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": 0.0, + "y": 0.0, + "width": 0.0, + "height": 0.0 + } + }, + "m_Slots": [ + { + "m_Id": "4590bfa2a0664b65b6f073bae33a071f" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SerializedDescriptor": "SurfaceDescription.Emission" +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "e6e80c6b0db545cda26b079a9a78fbb3", + "m_Id": 5, + "m_DisplayName": "G", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "G", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.CustomFunctionNode", + "m_ObjectId": "e818605f8f5a4f01bf61caaa33693581", + "m_Group": { + "m_Id": "42cadae0923e4969b50bbc3f78185934" + }, + "m_Name": "ComputeSDF44 (Custom Function)", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4144.0, + "y": -3369.0, + "width": 244.0, + "height": 214.0 + } + }, + "m_Slots": [ + { + "m_Id": "641eda269d7b4da9acb65f8d50035ea9" + }, + { + "m_Id": "f6823778a3cf42d5bbe8a83e5f9c9fa3" + }, + { + "m_Id": "9c26fdddba244d36a854298c00473247" + }, + { + "m_Id": "f684c5678e9e4f078157a3ab7ef5057b" + }, + { + "m_Id": "14ad19bf20a140dd88d58452d7df688b" + }, + { + "m_Id": "215a82c127204988b751de7d3a39b955" + }, + { + "m_Id": "c478c32c45884c57a62f7b2aa8ddc3b0" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SourceType": 0, + "m_FunctionName": "ComputeSDF44", + "m_FunctionSource": "96de908384869cd409c75efa351d5edf", + "m_FunctionBody": "Enter function body here..." +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "e9e06fcb161e44ba8cc9f6f60264df78", + "m_Id": 2, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "ebbd94a7102a4457a48ac492de3bff14", + "m_Id": 5, + "m_DisplayName": "G", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "G", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "ebd6d75abcb84108bcadbfe7ee5f6244", + "m_Id": 7, + "m_DisplayName": "TextureHeight", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "TextureHeight", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "ec184d6d9fb2494897774c9e7d279e6d", + "m_Group": { + "m_Id": "013228b0fdf1424097798f0973a9a4fb" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4799.0, + "y": -2625.0, + "width": 165.0, + "height": 34.0 + } + }, + "m_Slots": [ + { + "m_Id": "ca2a1083dc014f39ab8af0cdf140866b" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "07946387933e416db576b677f0711e5f" + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.SubtractNode", + "m_ObjectId": "ec1f2e8bc9fd4ae38b133c60ee6c49b8", + "m_Group": { + "m_Id": "42cadae0923e4969b50bbc3f78185934" + }, + "m_Name": "Subtract", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4957.99951171875, + "y": -3204.0, + "width": 130.0, + "height": 118.0 + } + }, + "m_Slots": [ + { + "m_Id": "748c31bbcecc4b30bec2e42c0612175b" + }, + { + "m_Id": "4bda5c294e1949138d033640e1d385b4" + }, + { + "m_Id": "4e64dac49ddc47c3b5b1e27b17a08304" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.Internal.Vector4ShaderProperty", + "m_ObjectId": "ec79eb447dfd47a9b3380344c6a60f43", + "m_Guid": { + "m_GuidSerialized": "54c77f8b-0534-4b35-a3f0-83ab2ebe6c1f" + }, + "m_Name": "_OutlineTex_ST", + "m_DefaultReferenceName": "Vector4_1774DE83", + "m_OverrideReferenceName": "_OutlineTex_ST", + "m_GeneratePropertyBlock": true, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": { + "x": 1.0, + "y": 1.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.GroupData", + "m_ObjectId": "ecf16c34d46f4502ac601f0c38c7576b", + "m_Title": "Vertex Color", + "m_Position": { + "x": -3448.000244140625, + "y": -3579.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "ed1d1f1613334c3bb904dd08161cd7e5", + "m_Id": 0, + "m_DisplayName": "_GradientScale", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "ed6c215a65584deeaefad1d2c7743044", + "m_Id": 4, + "m_DisplayName": "RGBA", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "RGBA", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector3MaterialSlot", + "m_ObjectId": "edbee7a8952b46529ac5ad0365775774", + "m_Id": 5, + "m_DisplayName": "RGB", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "RGB", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.ColorRGBMaterialSlot", + "m_ObjectId": "ef0b93f78372439696f50711eaf57d90", + "m_Id": 0, + "m_DisplayName": "Base Color", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "BaseColor", + "m_StageCapability": 2, + "m_Value": { + "x": 0.7353569269180298, + "y": 0.7353569269180298, + "z": 0.7353569269180298 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [ + "X", + "Y", + "Z" + ], + "m_ColorMode": 0, + "m_DefaultColor": { + "r": 0.5, + "g": 0.5, + "b": 0.5, + "a": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector2MaterialSlot", + "m_ObjectId": "ef9738ec7e894772a14e9dce441c16c6", + "m_Id": 2, + "m_DisplayName": "UV", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "UV", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0 + }, + "m_Labels": [ + "X", + "Y" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.SamplerStateMaterialSlot", + "m_ObjectId": "f01d52cdcb1647aab35782b4af535efd", + "m_Id": 3, + "m_DisplayName": "Sampler", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Sampler", + "m_StageCapability": 3, + "m_BareResource": false +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.CustomFunctionNode", + "m_ObjectId": "f23a8b2b7c85478388ff7a8c8a6de740", + "m_Group": { + "m_Id": "42cadae0923e4969b50bbc3f78185934" + }, + "m_Name": "Layer4 (Custom Function)", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -3849.999755859375, + "y": -3286.0, + "width": 193.0, + "height": 189.99998474121095 + } + }, + "m_Slots": [ + { + "m_Id": "0fac35636fca4474a6afaefc3c757775" + }, + { + "m_Id": "cc88101667c9488f9c5a716e851c1b21" + }, + { + "m_Id": "68ec7c31365549d6a8ce883edfc02de2" + }, + { + "m_Id": "02559cbe5ad441a3904ccb75ded2b2c5" + }, + { + "m_Id": "34a67e0fef884f9399e674d9eeaf720c" + }, + { + "m_Id": "3802c81c3be24823aa1d7c9997a33c29" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SourceType": 0, + "m_FunctionName": "Layer4", + "m_FunctionSource": "96de908384869cd409c75efa351d5edf", + "m_FunctionBody": "Enter function body here..." +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "f2903158b3624759bca1fcd843698078", + "m_Id": 1, + "m_DisplayName": "B", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 3, + "m_Value": { + "x": 2.0, + "y": 2.0, + "z": 2.0, + "w": 2.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicValueMaterialSlot", + "m_ObjectId": "f2a351a5375c441b8d9ab7e2c9545a77", + "m_Id": 1, + "m_DisplayName": "B", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 3, + "m_Value": { + "e00": 2.0, + "e01": 2.0, + "e02": 2.0, + "e03": 2.0, + "e10": 2.0, + "e11": 2.0, + "e12": 2.0, + "e13": 2.0, + "e20": 2.0, + "e21": 2.0, + "e22": 2.0, + "e23": 2.0, + "e30": 2.0, + "e31": 2.0, + "e32": 2.0, + "e33": 2.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Texture2DPropertiesNode", + "m_ObjectId": "f383b24f0bc6434dafe44b3e3d338a63", + "m_Group": { + "m_Id": "d0a791a544614667962a9a9a9ce0c68a" + }, + "m_Name": "Texel Size", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -6012.99951171875, + "y": -3209.0, + "width": 183.99998474121095, + "height": 100.99999237060547 + } + }, + "m_Slots": [ + { + "m_Id": "fb5e1e2a67c14602808358686bb75091" + }, + { + "m_Id": "712da461f71a454db59d349f752d41ee" + }, + { + "m_Id": "b000f852aa984e9dae25b125a4607f4e" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "f3d31c1f18d8491a8ecf5cbc37e4b7db", + "m_Group": { + "m_Id": "42cadae0923e4969b50bbc3f78185934" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4321.99951171875, + "y": -3246.0, + "width": 153.0, + "height": 34.0 + } + }, + "m_Slots": [ + { + "m_Id": "ed1d1f1613334c3bb904dd08161cd7e5" + } + ], + "synonyms": [], + "m_Precision": 1, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "a6bbb32e8d884be9bb36db91fe4b81b1" + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "f42ad06b3c6a45d3ab33de904c063412", + "m_Id": 3, + "m_DisplayName": "A", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "f48f04ad45d046a8b88e71731ed506e7", + "m_Id": 4, + "m_DisplayName": "R", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "R", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BlockNode", + "m_ObjectId": "f4ecc442a2d246759f7c2c0412953d28", + "m_Group": { + "m_Id": "" + }, + "m_Name": "VertexDescription.Normal", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": 0.0, + "y": 0.0, + "width": 0.0, + "height": 0.0 + } + }, + "m_Slots": [ + { + "m_Id": "a3f8b6e8ae7f48e2989a029904401502" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SerializedDescriptor": "VertexDescription.Normal" +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "f6823778a3cf42d5bbe8a83e5f9c9fa3", + "m_Id": 1, + "m_DisplayName": "SD", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "SD", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "f684c5678e9e4f078157a3ab7ef5057b", + "m_Id": 4, + "m_DisplayName": "Isoperimeter", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Isoperimeter", + "m_StageCapability": 3, + "m_Value": { + "x": 3.0, + "y": 2.0, + "z": 1.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector2MaterialSlot", + "m_ObjectId": "f68d9dee5cbc43cdb355d8fadae602d3", + "m_Id": 0, + "m_DisplayName": "UV_1", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "UV_1", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.SampleTexture2DNode", + "m_ObjectId": "f814deb543c24fbbafbcdb5071d96022", + "m_Group": { + "m_Id": "42cadae0923e4969b50bbc3f78185934" + }, + "m_Name": "Sample Texture 2D", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4600.0, + "y": -3245.0, + "width": 183.99998474121095, + "height": 253.0 + } + }, + "m_Slots": [ + { + "m_Id": "abd59150589b436cadf8c9e6f43ccb8e" + }, + { + "m_Id": "7acfafd73b8c4dfab8c55c18a887e087" + }, + { + "m_Id": "928621a3ca2d41c89a10336bbbc81ddc" + }, + { + "m_Id": "b7f9ac55517141868bfb9d2ad6429792" + }, + { + "m_Id": "09b1b86c1c074337a4c439d3a308dd2e" + }, + { + "m_Id": "1f247658c7ba45fb93c41f51e21acb0d" + }, + { + "m_Id": "d30452ac6b244ecca03df4d7b4de9f81" + }, + { + "m_Id": "215b30ae27784ec3a13360a9029af283" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_TextureType": 0, + "m_NormalMapSpace": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "f864c900600e427ba7793f00c715e971", + "m_Id": 0, + "m_DisplayName": "Outline Width", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicValueMaterialSlot", + "m_ObjectId": "fa6de3be9f5b4411b5081b49e645f424", + "m_Id": 1, + "m_DisplayName": "B", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 3, + "m_Value": { + "e00": 2.0, + "e01": 2.0, + "e02": 2.0, + "e03": 2.0, + "e10": 2.0, + "e11": 2.0, + "e12": 2.0, + "e13": 2.0, + "e20": 2.0, + "e21": 2.0, + "e22": 2.0, + "e23": 2.0, + "e30": 2.0, + "e31": 2.0, + "e32": 2.0, + "e33": 2.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DivideNode", + "m_ObjectId": "faace8101df943d8956faa31728cb004", + "m_Group": { + "m_Id": "daaf032a109749a88c9b8ff8e1f8b541" + }, + "m_Name": "Divide", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -5254.99951171875, + "y": -3891.0, + "width": 130.0, + "height": 118.0 + } + }, + "m_Slots": [ + { + "m_Id": "77e28f3e930b4c249145630ec961af95" + }, + { + "m_Id": "f2903158b3624759bca1fcd843698078" + }, + { + "m_Id": "30ca940fe2794c949f2a1d4d2caaa446" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "facc84930f544fd7a0205a6176b18ac0", + "m_Id": 2, + "m_DisplayName": "RGBA", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "RGBA", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Texture2DInputMaterialSlot", + "m_ObjectId": "fb15d0ba56d54a6192f11e107aeb5fa8", + "m_Id": 1, + "m_DisplayName": "Texture", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Texture", + "m_StageCapability": 3, + "m_BareResource": false, + "m_Texture": { + "m_SerializedTexture": "{\"texture\":{\"instanceID\":0}}", + "m_Guid": "" + }, + "m_DefaultType": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "fb5e1e2a67c14602808358686bb75091", + "m_Id": 0, + "m_DisplayName": "Width", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Width", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "fc2e62201c5847e798fd939314413fcd", + "m_Id": 4, + "m_DisplayName": "RGBA", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "RGBA", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicValueMaterialSlot", + "m_ObjectId": "fd0b096ed5b74f9e9ec51327be200731", + "m_Id": 2, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "e00": 0.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 0.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 0.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 0.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.SampleTexture2DNode", + "m_ObjectId": "fdb77c3e92ee497b88ca5dc46dc45350", + "m_Group": { + "m_Id": "98934a69591249d5b8b92b39045359a3" + }, + "m_Name": "Sample Texture 2D", + "m_DrawState": { + "m_Expanded": false, + "m_Position": { + "serializedVersion": "2", + "x": -4208.0, + "y": -2371.0, + "width": 180.0, + "height": 180.0 + } + }, + "m_Slots": [ + { + "m_Id": "4328cdbf78b94c038fd614c59bfe1cac" + }, + { + "m_Id": "04dfcc9ff13a4bf282ed46faec39d15c" + }, + { + "m_Id": "71dd947935b64ce38f0d25406dde447b" + }, + { + "m_Id": "61a6ac5f29344d109411f26850ab0a96" + }, + { + "m_Id": "44806230fa384c1e95f9c5918a14f056" + }, + { + "m_Id": "4eb3c00a1ca44e10be833b7ca61ff059" + }, + { + "m_Id": "57abc172afd449e2a4d567f93432507b" + }, + { + "m_Id": "cda5e3b4c1054bf3a65c0b7ec6bc778a" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_TextureType": 0, + "m_NormalMapSpace": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector3MaterialSlot", + "m_ObjectId": "fe11fa80cc1847a5a37f6757d521cf25", + "m_Id": 5, + "m_DisplayName": "RGB", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "RGB", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [] +} + diff --git a/Assets/Resources/TextMesh Pro/Shaders/TMP_SDF-HDRP UNLIT.shadergraph.meta b/Assets/Resources/TextMesh Pro/Shaders/TMP_SDF-HDRP UNLIT.shadergraph.meta new file mode 100644 index 0000000..a2f732a --- /dev/null +++ b/Assets/Resources/TextMesh Pro/Shaders/TMP_SDF-HDRP UNLIT.shadergraph.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: f63d574838ccfb44f84acc05fed0af48 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: 625f186215c104763be7675aa2d941aa, type: 3} diff --git a/Assets/Resources/TextMesh Pro/Shaders/TMP_SDF-Mobile Masking.shader b/Assets/Resources/TextMesh Pro/Shaders/TMP_SDF-Mobile Masking.shader new file mode 100644 index 0000000..0afc758 --- /dev/null +++ b/Assets/Resources/TextMesh Pro/Shaders/TMP_SDF-Mobile Masking.shader @@ -0,0 +1,253 @@ +// Simplified SDF shader: +// - No Shading Option (bevel / bump / env map) +// - No Glow Option +// - Softness is applied on both side of the outline + +Shader "TextMeshPro/Mobile/Distance Field - Masking" { + +Properties { + _FaceColor ("Face Color", Color) = (1,1,1,1) + _FaceDilate ("Face Dilate", Range(-1,1)) = 0 + + _OutlineColor ("Outline Color", Color) = (0,0,0,1) + _OutlineWidth ("Outline Thickness", Range(0,1)) = 0 + _OutlineSoftness ("Outline Softness", Range(0,1)) = 0 + + _UnderlayColor ("Border Color", Color) = (0,0,0,.5) + _UnderlayOffsetX ("Border OffsetX", Range(-1,1)) = 0 + _UnderlayOffsetY ("Border OffsetY", Range(-1,1)) = 0 + _UnderlayDilate ("Border Dilate", Range(-1,1)) = 0 + _UnderlaySoftness ("Border Softness", Range(0,1)) = 0 + + _WeightNormal ("Weight Normal", float) = 0 + _WeightBold ("Weight Bold", float) = .5 + + _ShaderFlags ("Flags", float) = 0 + _ScaleRatioA ("Scale RatioA", float) = 1 + _ScaleRatioB ("Scale RatioB", float) = 1 + _ScaleRatioC ("Scale RatioC", float) = 1 + + _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 + _PerspectiveFilter ("Perspective Correction", Range(0, 1)) = 0.875 + _Sharpness ("Sharpness", Range(-1,1)) = 0 + + _VertexOffsetX ("Vertex OffsetX", float) = 0 + _VertexOffsetY ("Vertex OffsetY", float) = 0 + + _ClipRect ("Clip Rect", vector) = (-32767, -32767, 32767, 32767) + _MaskSoftnessX ("Mask SoftnessX", float) = 0 + _MaskSoftnessY ("Mask SoftnessY", float) = 0 + _MaskTex ("Mask Texture", 2D) = "white" {} + _MaskInverse ("Inverse", float) = 0 + _MaskEdgeColor ("Edge Color", Color) = (1,1,1,1) + _MaskEdgeSoftness ("Edge Softness", Range(0, 1)) = 0.01 + _MaskWipeControl ("Wipe Position", Range(0, 1)) = 0.5 + + _StencilComp ("Stencil Comparison", Float) = 8 + _Stencil ("Stencil ID", Float) = 0 + _StencilOp ("Stencil Operation", Float) = 0 + _StencilWriteMask ("Stencil Write Mask", Float) = 255 + _StencilReadMask ("Stencil Read Mask", Float) = 255 + + _CullMode ("Cull Mode", Float) = 0 + _ColorMask ("Color Mask", Float) = 15 +} + +SubShader { + Tags + { + "Queue"="Transparent" + "IgnoreProjector"="True" + "RenderType"="Transparent" + } + + + Stencil + { + Ref [_Stencil] + Comp [_StencilComp] + Pass [_StencilOp] + ReadMask [_StencilReadMask] + WriteMask [_StencilWriteMask] + } + + Cull [_CullMode] + ZWrite Off + Lighting Off + Fog { Mode Off } + ZTest [unity_GUIZTestMode] + Blend One OneMinusSrcAlpha + ColorMask [_ColorMask] + + Pass { + CGPROGRAM + #pragma vertex VertShader + #pragma fragment PixShader + #pragma shader_feature __ OUTLINE_ON + #pragma shader_feature __ UNDERLAY_ON UNDERLAY_INNER + + #pragma multi_compile __ UNITY_UI_CLIP_RECT + #pragma multi_compile __ UNITY_UI_ALPHACLIP + + + #include "UnityCG.cginc" + #include "UnityUI.cginc" + #include "TMPro_Properties.cginc" + + struct vertex_t + { + float4 vertex : POSITION; + float3 normal : NORMAL; + fixed4 color : COLOR; + float4 texcoord0 : TEXCOORD0; + float2 texcoord1 : TEXCOORD1; + }; + + struct pixel_t + { + float4 vertex : SV_POSITION; + fixed4 faceColor : COLOR; + fixed4 outlineColor : COLOR1; + float4 texcoord0 : TEXCOORD0; // Texture UV, Mask UV + half4 param : TEXCOORD1; // Scale(x), BiasIn(y), BiasOut(z), Bias(w) + half4 mask : TEXCOORD2; // Position in clip space(xy), Softness(zw) + + #if (UNDERLAY_ON | UNDERLAY_INNER) + float4 texcoord1 : TEXCOORD3; // Texture UV, alpha, reserved + half2 underlayParam : TEXCOORD4; // Scale(x), Bias(y) + #endif + }; + + float _MaskWipeControl; + float _MaskEdgeSoftness; + fixed4 _MaskEdgeColor; + bool _MaskInverse; + float _UIMaskSoftnessX; + float _UIMaskSoftnessY; + + pixel_t VertShader(vertex_t input) + { + float bold = step(input.texcoord0.w, 0); + + float4 vert = input.vertex; + vert.x += _VertexOffsetX; + vert.y += _VertexOffsetY; + float4 vPosition = UnityObjectToClipPos(vert); + + float2 pixelSize = vPosition.w; + pixelSize /= float2(_ScaleX, _ScaleY) * abs(mul((float2x2)UNITY_MATRIX_P, _ScreenParams.xy)); + + float scale = rsqrt(dot(pixelSize, pixelSize)); + scale *= abs(input.texcoord0.w) * _GradientScale * (_Sharpness + 1); + if(UNITY_MATRIX_P[3][3] == 0) scale = lerp(abs(scale) * (1 - _PerspectiveFilter), scale, abs(dot(UnityObjectToWorldNormal(input.normal.xyz), normalize(WorldSpaceViewDir(vert))))); + + float weight = lerp(_WeightNormal, _WeightBold, bold) / 4.0; + weight = (weight + _FaceDilate) * _ScaleRatioA * 0.5; + + float layerScale = scale; + + scale /= 1 + (_OutlineSoftness * _ScaleRatioA * scale); + float bias = (0.5 - weight) * scale - 0.5; + float outline = _OutlineWidth * _ScaleRatioA * 0.5 * scale; + + float opacity = input.color.a; + #if (UNDERLAY_ON | UNDERLAY_INNER) + opacity = 1.0; + #endif + + fixed4 faceColor = fixed4(input.color.rgb, opacity) * _FaceColor; + faceColor.rgb *= faceColor.a; + + fixed4 outlineColor = _OutlineColor; + outlineColor.a *= opacity; + outlineColor.rgb *= outlineColor.a; + outlineColor = lerp(faceColor, outlineColor, sqrt(min(1.0, (outline * 2)))); + + #if (UNDERLAY_ON | UNDERLAY_INNER) + + layerScale /= 1 + ((_UnderlaySoftness * _ScaleRatioC) * layerScale); + float layerBias = (.5 - weight) * layerScale - .5 - ((_UnderlayDilate * _ScaleRatioC) * .5 * layerScale); + + float x = -(_UnderlayOffsetX * _ScaleRatioC) * _GradientScale / _TextureWidth; + float y = -(_UnderlayOffsetY * _ScaleRatioC) * _GradientScale / _TextureHeight; + float2 layerOffset = float2(x, y); + #endif + + // Generate UV for the Masking Texture + float4 clampedRect = clamp(_ClipRect, -2e10, 2e10); + float2 maskUV = (vert.xy - clampedRect.xy) / (clampedRect.zw - clampedRect.xy); + const half2 maskSoftness = half2(max(_UIMaskSoftnessX, _MaskSoftnessX), max(_UIMaskSoftnessY, _MaskSoftnessY)); + + // Structure for pixel shader + pixel_t output = { + vPosition, + faceColor, + outlineColor, + float4(input.texcoord0.x, input.texcoord0.y, maskUV.x, maskUV.y), + half4(scale, bias - outline, bias + outline, bias), + half4(vert.xy * 2 - clampedRect.xy - clampedRect.zw, 0.25 / (0.25 * maskSoftness + pixelSize.xy)), + #if (UNDERLAY_ON | UNDERLAY_INNER) + float4(input.texcoord0 + layerOffset, input.color.a, 0), + half2(layerScale, layerBias), + #endif + }; + + return output; + } + + + // PIXEL SHADER + fixed4 PixShader(pixel_t input) : SV_Target + { + half d = tex2D(_MainTex, input.texcoord0.xy).a * input.param.x; + half4 c = input.faceColor * saturate(d - input.param.w); + + #ifdef OUTLINE_ON + c = lerp(input.outlineColor, input.faceColor, saturate(d - input.param.z)); + c *= saturate(d - input.param.y); + #endif + + #if UNDERLAY_ON + d = tex2D(_MainTex, input.texcoord1.xy).a * input.underlayParam.x; + c += float4(_UnderlayColor.rgb * _UnderlayColor.a, _UnderlayColor.a) * saturate(d - input.underlayParam.y) * (1 - c.a); + #endif + + #if UNDERLAY_INNER + half sd = saturate(d - input.param.z); + d = tex2D(_MainTex, input.texcoord1.xy).a * input.underlayParam.x; + c += float4(_UnderlayColor.rgb * _UnderlayColor.a, _UnderlayColor.a) * (1 - saturate(d - input.underlayParam.y)) * sd * (1 - c.a); + #endif + + // Alternative implementation to UnityGet2DClipping with support for softness. + //#if UNITY_UI_CLIP_RECT + half2 m = saturate((_ClipRect.zw - _ClipRect.xy - abs(input.mask.xy)) * input.mask.zw); + c *= m.x * m.y; + //#endif + + float a = abs(_MaskInverse - tex2D(_MaskTex, input.texcoord0.zw).a); + float t = a + (1 - _MaskWipeControl) * _MaskEdgeSoftness - _MaskWipeControl; + a = saturate(t / _MaskEdgeSoftness); + c.rgb = lerp(_MaskEdgeColor.rgb*c.a, c.rgb, a); + c *= a; + + #if (UNDERLAY_ON | UNDERLAY_INNER) + c *= input.texcoord1.z; + #endif + + #if UNITY_UI_ALPHACLIP + clip(c.a - 0.001); + #endif + + return c; + } + ENDCG + } +} + +CustomEditor "TMPro.EditorUtilities.TMP_SDFShaderGUI" +} diff --git a/Assets/Resources/TextMesh Pro/Shaders/TMP_SDF-Mobile Masking.shader.meta b/Assets/Resources/TextMesh Pro/Shaders/TMP_SDF-Mobile Masking.shader.meta new file mode 100644 index 0000000..3cbdbbb --- /dev/null +++ b/Assets/Resources/TextMesh Pro/Shaders/TMP_SDF-Mobile Masking.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: bc1ede39bf3643ee8e493720e4259791 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/TextMesh Pro/Shaders/TMP_SDF-Mobile Overlay.shader b/Assets/Resources/TextMesh Pro/Shaders/TMP_SDF-Mobile Overlay.shader new file mode 100644 index 0000000..6e10f7c --- /dev/null +++ b/Assets/Resources/TextMesh Pro/Shaders/TMP_SDF-Mobile Overlay.shader @@ -0,0 +1,247 @@ +// Simplified SDF shader: +// - No Shading Option (bevel / bump / env map) +// - No Glow Option +// - Softness is applied on both side of the outline + +Shader "TextMeshPro/Mobile/Distance Field Overlay" { + +Properties { + _FaceColor ("Face Color", Color) = (1,1,1,1) + _FaceDilate ("Face Dilate", Range(-1,1)) = 0 + + _OutlineColor ("Outline Color", Color) = (0,0,0,1) + _OutlineWidth ("Outline Thickness", Range(0,1)) = 0 + _OutlineSoftness ("Outline Softness", Range(0,1)) = 0 + + _UnderlayColor ("Border Color", Color) = (0,0,0,.5) + _UnderlayOffsetX ("Border OffsetX", Range(-1,1)) = 0 + _UnderlayOffsetY ("Border OffsetY", Range(-1,1)) = 0 + _UnderlayDilate ("Border Dilate", Range(-1,1)) = 0 + _UnderlaySoftness ("Border Softness", Range(0,1)) = 0 + + _WeightNormal ("Weight Normal", float) = 0 + _WeightBold ("Weight Bold", float) = .5 + + _ShaderFlags ("Flags", float) = 0 + _ScaleRatioA ("Scale RatioA", float) = 1 + _ScaleRatioB ("Scale RatioB", float) = 1 + _ScaleRatioC ("Scale RatioC", float) = 1 + + _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 + _PerspectiveFilter ("Perspective Correction", Range(0, 1)) = 0.875 + _Sharpness ("Sharpness", Range(-1,1)) = 0 + + _VertexOffsetX ("Vertex OffsetX", float) = 0 + _VertexOffsetY ("Vertex OffsetY", float) = 0 + + _ClipRect ("Clip Rect", vector) = (-32767, -32767, 32767, 32767) + _MaskSoftnessX ("Mask SoftnessX", float) = 0 + _MaskSoftnessY ("Mask SoftnessY", float) = 0 + + _StencilComp ("Stencil Comparison", Float) = 8 + _Stencil ("Stencil ID", Float) = 0 + _StencilOp ("Stencil Operation", Float) = 0 + _StencilWriteMask ("Stencil Write Mask", Float) = 255 + _StencilReadMask ("Stencil Read Mask", Float) = 255 + + _CullMode ("Cull Mode", Float) = 0 + _ColorMask ("Color Mask", Float) = 15 +} + +SubShader { + Tags + { + "Queue"="Overlay" + "IgnoreProjector"="True" + "RenderType"="Transparent" + } + + + Stencil + { + Ref [_Stencil] + Comp [_StencilComp] + Pass [_StencilOp] + ReadMask [_StencilReadMask] + WriteMask [_StencilWriteMask] + } + + Cull [_CullMode] + ZWrite Off + Lighting Off + Fog { Mode Off } + ZTest Always + Blend One OneMinusSrcAlpha + ColorMask [_ColorMask] + + Pass { + CGPROGRAM + #pragma vertex VertShader + #pragma fragment PixShader + #pragma shader_feature __ OUTLINE_ON + #pragma shader_feature __ UNDERLAY_ON UNDERLAY_INNER + + #pragma multi_compile __ UNITY_UI_CLIP_RECT + #pragma multi_compile __ UNITY_UI_ALPHACLIP + + #include "UnityCG.cginc" + #include "UnityUI.cginc" + #include "TMPro_Properties.cginc" + + struct vertex_t + { + UNITY_VERTEX_INPUT_INSTANCE_ID + float4 vertex : POSITION; + float3 normal : NORMAL; + fixed4 color : COLOR; + float4 texcoord0 : TEXCOORD0; + float2 texcoord1 : TEXCOORD1; + }; + + struct pixel_t + { + UNITY_VERTEX_INPUT_INSTANCE_ID + UNITY_VERTEX_OUTPUT_STEREO + float4 vertex : SV_POSITION; + fixed4 faceColor : COLOR; + fixed4 outlineColor : COLOR1; + float4 texcoord0 : TEXCOORD0; // Texture UV, Mask UV + half4 param : TEXCOORD1; // Scale(x), BiasIn(y), BiasOut(z), Bias(w) + half4 mask : TEXCOORD2; // Position in clip space(xy), Softness(zw) + + #if (UNDERLAY_ON | UNDERLAY_INNER) + float4 texcoord1 : TEXCOORD3; // Texture UV, alpha, reserved + half2 underlayParam : TEXCOORD4; // Scale(x), Bias(y) + #endif + }; + + float _UIMaskSoftnessX; + float _UIMaskSoftnessY; + + + pixel_t VertShader(vertex_t input) + { + pixel_t output; + + UNITY_INITIALIZE_OUTPUT(pixel_t, output); + UNITY_SETUP_INSTANCE_ID(input); + UNITY_TRANSFER_INSTANCE_ID(input, output); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(output); + + float bold = step(input.texcoord0.w, 0); + + float4 vert = input.vertex; + vert.x += _VertexOffsetX; + vert.y += _VertexOffsetY; + float4 vPosition = UnityObjectToClipPos(vert); + + float2 pixelSize = vPosition.w; + pixelSize /= float2(_ScaleX, _ScaleY) * abs(mul((float2x2)UNITY_MATRIX_P, _ScreenParams.xy)); + + float scale = rsqrt(dot(pixelSize, pixelSize)); + scale *= abs(input.texcoord0.w) * _GradientScale * (_Sharpness + 1); + if(UNITY_MATRIX_P[3][3] == 0) scale = lerp(abs(scale) * (1 - _PerspectiveFilter), scale, abs(dot(UnityObjectToWorldNormal(input.normal.xyz), normalize(WorldSpaceViewDir(vert))))); + + float weight = lerp(_WeightNormal, _WeightBold, bold) / 4.0; + weight = (weight + _FaceDilate) * _ScaleRatioA * 0.5; + + float layerScale = scale; + + scale /= 1 + (_OutlineSoftness * _ScaleRatioA * scale); + float bias = (0.5 - weight) * scale - 0.5; + float outline = _OutlineWidth * _ScaleRatioA * 0.5 * scale; + + float opacity = input.color.a; + #if (UNDERLAY_ON | UNDERLAY_INNER) + opacity = 1.0; + #endif + + fixed4 faceColor = fixed4(input.color.rgb, opacity) * _FaceColor; + faceColor.rgb *= faceColor.a; + + fixed4 outlineColor = _OutlineColor; + outlineColor.a *= opacity; + outlineColor.rgb *= outlineColor.a; + outlineColor = lerp(faceColor, outlineColor, sqrt(min(1.0, (outline * 2)))); + + #if (UNDERLAY_ON | UNDERLAY_INNER) + layerScale /= 1 + ((_UnderlaySoftness * _ScaleRatioC) * layerScale); + float layerBias = (.5 - weight) * layerScale - .5 - ((_UnderlayDilate * _ScaleRatioC) * .5 * layerScale); + + float x = -(_UnderlayOffsetX * _ScaleRatioC) * _GradientScale / _TextureWidth; + float y = -(_UnderlayOffsetY * _ScaleRatioC) * _GradientScale / _TextureHeight; + float2 layerOffset = float2(x, y); + #endif + + // Generate UV for the Masking Texture + float4 clampedRect = clamp(_ClipRect, -2e10, 2e10); + float2 maskUV = (vert.xy - clampedRect.xy) / (clampedRect.zw - clampedRect.xy); + + // Populate structure for pixel shader + output.vertex = vPosition; + output.faceColor = faceColor; + output.outlineColor = outlineColor; + output.texcoord0 = float4(input.texcoord0.x, input.texcoord0.y, maskUV.x, maskUV.y); + output.param = half4(scale, bias - outline, bias + outline, bias); + const half2 maskSoftness = half2(max(_UIMaskSoftnessX, _MaskSoftnessX), max(_UIMaskSoftnessY, _MaskSoftnessY)); + output.mask = half4(vert.xy * 2 - clampedRect.xy - clampedRect.zw, 0.25 / (0.25 * maskSoftness + pixelSize.xy)); + #if (UNDERLAY_ON || UNDERLAY_INNER) + output.texcoord1 = float4(input.texcoord0 + layerOffset, input.color.a, 0); + output.underlayParam = half2(layerScale, layerBias); + #endif + + return output; + } + + + // PIXEL SHADER + fixed4 PixShader(pixel_t input) : SV_Target + { + UNITY_SETUP_INSTANCE_ID(input); + + half d = tex2D(_MainTex, input.texcoord0.xy).a * input.param.x; + half4 c = input.faceColor * saturate(d - input.param.w); + + #ifdef OUTLINE_ON + c = lerp(input.outlineColor, input.faceColor, saturate(d - input.param.z)); + c *= saturate(d - input.param.y); + #endif + + #if UNDERLAY_ON + d = tex2D(_MainTex, input.texcoord1.xy).a * input.underlayParam.x; + c += float4(_UnderlayColor.rgb * _UnderlayColor.a, _UnderlayColor.a) * saturate(d - input.underlayParam.y) * (1 - c.a); + #endif + + #if UNDERLAY_INNER + half sd = saturate(d - input.param.z); + d = tex2D(_MainTex, input.texcoord1.xy).a * input.underlayParam.x; + c += float4(_UnderlayColor.rgb * _UnderlayColor.a, _UnderlayColor.a) * (1 - saturate(d - input.underlayParam.y)) * sd * (1 - c.a); + #endif + + // Alternative implementation to UnityGet2DClipping with support for softness. + #if UNITY_UI_CLIP_RECT + half2 m = saturate((_ClipRect.zw - _ClipRect.xy - abs(input.mask.xy)) * input.mask.zw); + c *= m.x * m.y; + #endif + + #if (UNDERLAY_ON | UNDERLAY_INNER) + c *= input.texcoord1.z; + #endif + + #if UNITY_UI_ALPHACLIP + clip(c.a - 0.001); + #endif + + return c; + } + ENDCG + } +} + +CustomEditor "TMPro.EditorUtilities.TMP_SDFShaderGUI" +} diff --git a/Assets/Resources/TextMesh Pro/Shaders/TMP_SDF-Mobile Overlay.shader.meta b/Assets/Resources/TextMesh Pro/Shaders/TMP_SDF-Mobile Overlay.shader.meta new file mode 100644 index 0000000..e6b149e --- /dev/null +++ b/Assets/Resources/TextMesh Pro/Shaders/TMP_SDF-Mobile Overlay.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: a02a7d8c237544f1962732b55a9aebf1 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/TextMesh Pro/Shaders/TMP_SDF-Mobile SSD.shader b/Assets/Resources/TextMesh Pro/Shaders/TMP_SDF-Mobile SSD.shader new file mode 100644 index 0000000..43b317d --- /dev/null +++ b/Assets/Resources/TextMesh Pro/Shaders/TMP_SDF-Mobile SSD.shader @@ -0,0 +1,106 @@ +// Simplified SDF shader: +// - No Shading Option (bevel / bump / env map) +// - No Glow Option +// - Softness is applied on both side of the outline + +Shader "TextMeshPro/Mobile/Distance Field SSD" { + +Properties { + _FaceColor ("Face Color", Color) = (1,1,1,1) + _FaceDilate ("Face Dilate", Range(-1,1)) = 0 + + _OutlineColor ("Outline Color", Color) = (0,0,0,1) + _OutlineWidth ("Outline Thickness", Range(0,1)) = 0 + _OutlineSoftness ("Outline Softness", Range(0,1)) = 0 + + _UnderlayColor ("Border Color", Color) = (0,0,0,.5) + _UnderlayOffsetX ("Border OffsetX", Range(-1,1)) = 0 + _UnderlayOffsetY ("Border OffsetY", Range(-1,1)) = 0 + _UnderlayDilate ("Border Dilate", Range(-1,1)) = 0 + _UnderlaySoftness ("Border Softness", Range(0,1)) = 0 + + _WeightNormal ("Weight Normal", float) = 0 + _WeightBold ("Weight Bold", float) = .5 + + _ShaderFlags ("Flags", float) = 0 + _ScaleRatioA ("Scale RatioA", float) = 1 + _ScaleRatioB ("Scale RatioB", float) = 1 + _ScaleRatioC ("Scale RatioC", float) = 1 + + _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 + _PerspectiveFilter ("Perspective Correction", Range(0, 1)) = 0.875 + _Sharpness ("Sharpness", Range(-1,1)) = 0 + + _VertexOffsetX ("Vertex OffsetX", float) = 0 + _VertexOffsetY ("Vertex OffsetY", float) = 0 + + _ClipRect ("Clip Rect", vector) = (-32767, -32767, 32767, 32767) + _MaskSoftnessX ("Mask SoftnessX", float) = 0 + _MaskSoftnessY ("Mask SoftnessY", float) = 0 + _MaskTex ("Mask Texture", 2D) = "white" {} + _MaskInverse ("Inverse", float) = 0 + _MaskEdgeColor ("Edge Color", Color) = (1,1,1,1) + _MaskEdgeSoftness ("Edge Softness", Range(0, 1)) = 0.01 + _MaskWipeControl ("Wipe Position", Range(0, 1)) = 0.5 + + _StencilComp ("Stencil Comparison", Float) = 8 + _Stencil ("Stencil ID", Float) = 0 + _StencilOp ("Stencil Operation", Float) = 0 + _StencilWriteMask ("Stencil Write Mask", Float) = 255 + _StencilReadMask ("Stencil Read Mask", Float) = 255 + + _CullMode ("Cull Mode", Float) = 0 + _ColorMask ("Color Mask", Float) = 15 +} + +SubShader { + Tags { + "Queue"="Transparent" + "IgnoreProjector"="True" + "RenderType"="Transparent" + } + + Stencil + { + Ref [_Stencil] + Comp [_StencilComp] + Pass [_StencilOp] + ReadMask [_StencilReadMask] + WriteMask [_StencilWriteMask] + } + + Cull [_CullMode] + ZWrite Off + Lighting Off + Fog { Mode Off } + ZTest [unity_GUIZTestMode] + Blend One OneMinusSrcAlpha + ColorMask [_ColorMask] + + Pass { + CGPROGRAM + #pragma vertex VertShader + #pragma fragment PixShader + #pragma shader_feature __ OUTLINE_ON + #pragma shader_feature __ UNDERLAY_ON UNDERLAY_INNER + + #pragma multi_compile __ UNITY_UI_CLIP_RECT + #pragma multi_compile __ UNITY_UI_ALPHACLIP + + #include "UnityCG.cginc" + #include "UnityUI.cginc" + #include "TMPro_Properties.cginc" + + #include "TMPro_Mobile.cginc" + + ENDCG + } +} + +CustomEditor "TMPro.EditorUtilities.TMP_SDFShaderGUI" +} diff --git a/Assets/Resources/TextMesh Pro/Shaders/TMP_SDF-Mobile SSD.shader.meta b/Assets/Resources/TextMesh Pro/Shaders/TMP_SDF-Mobile SSD.shader.meta new file mode 100644 index 0000000..9b84c13 --- /dev/null +++ b/Assets/Resources/TextMesh Pro/Shaders/TMP_SDF-Mobile SSD.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: c8d12adcee749c344b8117cf7c7eb912 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/TextMesh Pro/Shaders/TMP_SDF-Mobile.shader b/Assets/Resources/TextMesh Pro/Shaders/TMP_SDF-Mobile.shader new file mode 100644 index 0000000..40e9b12 --- /dev/null +++ b/Assets/Resources/TextMesh Pro/Shaders/TMP_SDF-Mobile.shader @@ -0,0 +1,244 @@ +// Simplified SDF shader: +// - No Shading Option (bevel / bump / env map) +// - No Glow Option +// - Softness is applied on both side of the outline + +Shader "TextMeshPro/Mobile/Distance Field" { + +Properties { + _FaceColor ("Face Color", Color) = (1,1,1,1) + _FaceDilate ("Face Dilate", Range(-1,1)) = 0 + + _OutlineColor ("Outline Color", Color) = (0,0,0,1) + _OutlineWidth ("Outline Thickness", Range(0,1)) = 0 + _OutlineSoftness ("Outline Softness", Range(0,1)) = 0 + + _UnderlayColor ("Border Color", Color) = (0,0,0,.5) + _UnderlayOffsetX ("Border OffsetX", Range(-1,1)) = 0 + _UnderlayOffsetY ("Border OffsetY", Range(-1,1)) = 0 + _UnderlayDilate ("Border Dilate", Range(-1,1)) = 0 + _UnderlaySoftness ("Border Softness", Range(0,1)) = 0 + + _WeightNormal ("Weight Normal", float) = 0 + _WeightBold ("Weight Bold", float) = .5 + + _ShaderFlags ("Flags", float) = 0 + _ScaleRatioA ("Scale RatioA", float) = 1 + _ScaleRatioB ("Scale RatioB", float) = 1 + _ScaleRatioC ("Scale RatioC", float) = 1 + + _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 + _PerspectiveFilter ("Perspective Correction", Range(0, 1)) = 0.875 + _Sharpness ("Sharpness", Range(-1,1)) = 0 + + _VertexOffsetX ("Vertex OffsetX", float) = 0 + _VertexOffsetY ("Vertex OffsetY", float) = 0 + + _ClipRect ("Clip Rect", vector) = (-32767, -32767, 32767, 32767) + _MaskSoftnessX ("Mask SoftnessX", float) = 0 + _MaskSoftnessY ("Mask SoftnessY", float) = 0 + + _StencilComp ("Stencil Comparison", Float) = 8 + _Stencil ("Stencil ID", Float) = 0 + _StencilOp ("Stencil Operation", Float) = 0 + _StencilWriteMask ("Stencil Write Mask", Float) = 255 + _StencilReadMask ("Stencil Read Mask", Float) = 255 + + _CullMode ("Cull Mode", Float) = 0 + _ColorMask ("Color Mask", Float) = 15 +} + +SubShader { + Tags + { + "Queue"="Transparent" + "IgnoreProjector"="True" + "RenderType"="Transparent" + } + + + Stencil + { + Ref [_Stencil] + Comp [_StencilComp] + Pass [_StencilOp] + ReadMask [_StencilReadMask] + WriteMask [_StencilWriteMask] + } + + Cull [_CullMode] + ZWrite Off + Lighting Off + Fog { Mode Off } + ZTest [unity_GUIZTestMode] + Blend One OneMinusSrcAlpha + ColorMask [_ColorMask] + + Pass { + CGPROGRAM + #pragma vertex VertShader + #pragma fragment PixShader + #pragma shader_feature __ OUTLINE_ON + #pragma shader_feature __ UNDERLAY_ON UNDERLAY_INNER + + #pragma multi_compile __ UNITY_UI_CLIP_RECT + #pragma multi_compile __ UNITY_UI_ALPHACLIP + + #include "UnityCG.cginc" + #include "UnityUI.cginc" + #include "TMPro_Properties.cginc" + + struct vertex_t { + UNITY_VERTEX_INPUT_INSTANCE_ID + float4 vertex : POSITION; + float3 normal : NORMAL; + fixed4 color : COLOR; + float4 texcoord0 : TEXCOORD0; + float2 texcoord1 : TEXCOORD1; + }; + + struct pixel_t { + UNITY_VERTEX_INPUT_INSTANCE_ID + UNITY_VERTEX_OUTPUT_STEREO + float4 vertex : SV_POSITION; + fixed4 faceColor : COLOR; + fixed4 outlineColor : COLOR1; + float4 texcoord0 : TEXCOORD0; // Texture UV, Mask UV + half4 param : TEXCOORD1; // Scale(x), BiasIn(y), BiasOut(z), Bias(w) + half4 mask : TEXCOORD2; // Position in clip space(xy), Softness(zw) + #if (UNDERLAY_ON | UNDERLAY_INNER) + float4 texcoord1 : TEXCOORD3; // Texture UV, alpha, reserved + half2 underlayParam : TEXCOORD4; // Scale(x), Bias(y) + #endif + }; + + float _UIMaskSoftnessX; + float _UIMaskSoftnessY; + + pixel_t VertShader(vertex_t input) + { + pixel_t output; + + UNITY_INITIALIZE_OUTPUT(pixel_t, output); + UNITY_SETUP_INSTANCE_ID(input); + UNITY_TRANSFER_INSTANCE_ID(input, output); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(output); + + float bold = step(input.texcoord0.w, 0); + + float4 vert = input.vertex; + vert.x += _VertexOffsetX; + vert.y += _VertexOffsetY; + float4 vPosition = UnityObjectToClipPos(vert); + + float2 pixelSize = vPosition.w; + pixelSize /= float2(_ScaleX, _ScaleY) * abs(mul((float2x2)UNITY_MATRIX_P, _ScreenParams.xy)); + + float scale = rsqrt(dot(pixelSize, pixelSize)); + scale *= abs(input.texcoord0.w) * _GradientScale * (_Sharpness + 1); + if(UNITY_MATRIX_P[3][3] == 0) scale = lerp(abs(scale) * (1 - _PerspectiveFilter), scale, abs(dot(UnityObjectToWorldNormal(input.normal.xyz), normalize(WorldSpaceViewDir(vert))))); + + float weight = lerp(_WeightNormal, _WeightBold, bold) / 4.0; + weight = (weight + _FaceDilate) * _ScaleRatioA * 0.5; + + float layerScale = scale; + + scale /= 1 + (_OutlineSoftness * _ScaleRatioA * scale); + float bias = (0.5 - weight) * scale - 0.5; + float outline = _OutlineWidth * _ScaleRatioA * 0.5 * scale; + + float opacity = input.color.a; + #if (UNDERLAY_ON | UNDERLAY_INNER) + opacity = 1.0; + #endif + + fixed4 faceColor = fixed4(input.color.rgb, opacity) * _FaceColor; + faceColor.rgb *= faceColor.a; + + fixed4 outlineColor = _OutlineColor; + outlineColor.a *= opacity; + outlineColor.rgb *= outlineColor.a; + outlineColor = lerp(faceColor, outlineColor, sqrt(min(1.0, (outline * 2)))); + + #if (UNDERLAY_ON | UNDERLAY_INNER) + layerScale /= 1 + ((_UnderlaySoftness * _ScaleRatioC) * layerScale); + float layerBias = (.5 - weight) * layerScale - .5 - ((_UnderlayDilate * _ScaleRatioC) * .5 * layerScale); + + float x = -(_UnderlayOffsetX * _ScaleRatioC) * _GradientScale / _TextureWidth; + float y = -(_UnderlayOffsetY * _ScaleRatioC) * _GradientScale / _TextureHeight; + float2 layerOffset = float2(x, y); + #endif + + // Generate UV for the Masking Texture + float4 clampedRect = clamp(_ClipRect, -2e10, 2e10); + float2 maskUV = (vert.xy - clampedRect.xy) / (clampedRect.zw - clampedRect.xy); + + // Populate structure for pixel shader + output.vertex = vPosition; + output.faceColor = faceColor; + output.outlineColor = outlineColor; + output.texcoord0 = float4(input.texcoord0.x, input.texcoord0.y, maskUV.x, maskUV.y); + output.param = half4(scale, bias - outline, bias + outline, bias); + + const half2 maskSoftness = half2(max(_UIMaskSoftnessX, _MaskSoftnessX), max(_UIMaskSoftnessY, _MaskSoftnessY)); + output.mask = half4(vert.xy * 2 - clampedRect.xy - clampedRect.zw, 0.25 / (0.25 * maskSoftness + pixelSize.xy)); + #if (UNDERLAY_ON || UNDERLAY_INNER) + output.texcoord1 = float4(input.texcoord0 + layerOffset, input.color.a, 0); + output.underlayParam = half2(layerScale, layerBias); + #endif + + return output; + } + + + // PIXEL SHADER + fixed4 PixShader(pixel_t input) : SV_Target + { + UNITY_SETUP_INSTANCE_ID(input); + + half d = tex2D(_MainTex, input.texcoord0.xy).a * input.param.x; + half4 c = input.faceColor * saturate(d - input.param.w); + + #ifdef OUTLINE_ON + c = lerp(input.outlineColor, input.faceColor, saturate(d - input.param.z)); + c *= saturate(d - input.param.y); + #endif + + #if UNDERLAY_ON + d = tex2D(_MainTex, input.texcoord1.xy).a * input.underlayParam.x; + c += float4(_UnderlayColor.rgb * _UnderlayColor.a, _UnderlayColor.a) * saturate(d - input.underlayParam.y) * (1 - c.a); + #endif + + #if UNDERLAY_INNER + half sd = saturate(d - input.param.z); + d = tex2D(_MainTex, input.texcoord1.xy).a * input.underlayParam.x; + c += float4(_UnderlayColor.rgb * _UnderlayColor.a, _UnderlayColor.a) * (1 - saturate(d - input.underlayParam.y)) * sd * (1 - c.a); + #endif + + // Alternative implementation to UnityGet2DClipping with support for softness. + #if UNITY_UI_CLIP_RECT + half2 m = saturate((_ClipRect.zw - _ClipRect.xy - abs(input.mask.xy)) * input.mask.zw); + c *= m.x * m.y; + #endif + + #if (UNDERLAY_ON | UNDERLAY_INNER) + c *= input.texcoord1.z; + #endif + + #if UNITY_UI_ALPHACLIP + clip(c.a - 0.001); + #endif + + return c; + } + ENDCG + } +} + +CustomEditor "TMPro.EditorUtilities.TMP_SDFShaderGUI" +} diff --git a/Assets/Resources/TextMesh Pro/Shaders/TMP_SDF-Mobile.shader.meta b/Assets/Resources/TextMesh Pro/Shaders/TMP_SDF-Mobile.shader.meta new file mode 100644 index 0000000..2ac6e76 --- /dev/null +++ b/Assets/Resources/TextMesh Pro/Shaders/TMP_SDF-Mobile.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: fe393ace9b354375a9cb14cdbbc28be4 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/TextMesh Pro/Shaders/TMP_SDF-Surface-Mobile.shader b/Assets/Resources/TextMesh Pro/Shaders/TMP_SDF-Surface-Mobile.shader new file mode 100644 index 0000000..68d0dfa --- /dev/null +++ b/Assets/Resources/TextMesh Pro/Shaders/TMP_SDF-Surface-Mobile.shader @@ -0,0 +1,139 @@ +// Simplified version of the SDF Surface shader : +// - No support for Bevel, Bump or envmap +// - Diffuse only lighting +// - Fully supports only 1 directional light. Other lights can affect it, but it will be per-vertex/SH. + +Shader "TextMeshPro/Mobile/Distance Field (Surface)" { + +Properties { + _FaceTex ("Fill Texture", 2D) = "white" {} + _FaceColor ("Fill Color", Color) = (1,1,1,1) + _FaceDilate ("Face Dilate", Range(-1,1)) = 0 + + _OutlineColor ("Outline Color", Color) = (0,0,0,1) + _OutlineTex ("Outline Texture", 2D) = "white" {} + _OutlineWidth ("Outline Thickness", Range(0, 1)) = 0 + _OutlineSoftness ("Outline Softness", Range(0,1)) = 0 + + _GlowColor ("Color", Color) = (0, 1, 0, 0.5) + _GlowOffset ("Offset", Range(-1,1)) = 0 + _GlowInner ("Inner", Range(0,1)) = 0.05 + _GlowOuter ("Outer", Range(0,1)) = 0.05 + _GlowPower ("Falloff", Range(1, 0)) = 0.75 + + _WeightNormal ("Weight Normal", float) = 0 + _WeightBold ("Weight Bold", float) = 0.5 + + // Should not be directly exposed to the user + _ShaderFlags ("Flags", float) = 0 + _ScaleRatioA ("Scale RatioA", float) = 1 + _ScaleRatioB ("Scale RatioB", float) = 1 + _ScaleRatioC ("Scale RatioC", float) = 1 + + _MainTex ("Font Atlas", 2D) = "white" {} + _TextureWidth ("Texture Width", float) = 512 + _TextureHeight ("Texture Height", float) = 512 + _GradientScale ("Gradient Scale", float) = 5.0 + _ScaleX ("Scale X", float) = 1.0 + _ScaleY ("Scale Y", float) = 1.0 + _PerspectiveFilter ("Perspective Correction", Range(0, 1)) = 0.875 + _Sharpness ("Sharpness", Range(-1,1)) = 0 + + _VertexOffsetX ("Vertex OffsetX", float) = 0 + _VertexOffsetY ("Vertex OffsetY", float) = 0 + + _CullMode ("Cull Mode", Float) = 0 + //_MaskCoord ("Mask Coords", vector) = (0,0,0,0) + //_MaskSoftness ("Mask Softness", float) = 0 +} + +SubShader { + + Tags { + "Queue"="Transparent" + "IgnoreProjector"="True" + "RenderType"="Transparent" + } + + LOD 300 + Cull [_CullMode] + + CGPROGRAM + #pragma surface PixShader Lambert alpha:blend vertex:VertShader noforwardadd nolightmap nodirlightmap + #pragma target 3.0 + #pragma shader_feature __ GLOW_ON + + #include "TMPro_Properties.cginc" + #include "TMPro.cginc" + + half _FaceShininess; + half _OutlineShininess; + + struct Input + { + fixed4 color : COLOR; + float2 uv_MainTex; + float2 uv2_FaceTex; + float2 uv2_OutlineTex; + float2 param; // Weight, Scale + float3 viewDirEnv; + }; + + #include "TMPro_Surface.cginc" + + ENDCG + + // Pass to render object as a shadow caster + Pass + { + Name "Caster" + Tags { "LightMode" = "ShadowCaster" } + Offset 1, 1 + + Fog {Mode Off} + ZWrite On ZTest LEqual Cull Off + + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + #pragma multi_compile_shadowcaster + #include "UnityCG.cginc" + + struct v2f + { + V2F_SHADOW_CASTER; + float2 uv : TEXCOORD1; + float2 uv2 : TEXCOORD3; + float alphaClip : TEXCOORD2; + }; + + uniform float4 _MainTex_ST; + uniform float4 _OutlineTex_ST; + float _OutlineWidth; + float _FaceDilate; + float _ScaleRatioA; + + v2f vert( appdata_base v ) + { + v2f o; + TRANSFER_SHADOW_CASTER(o) + o.uv = TRANSFORM_TEX(v.texcoord, _MainTex); + o.uv2 = TRANSFORM_TEX(v.texcoord, _OutlineTex); + o.alphaClip = o.alphaClip = (1.0 - _OutlineWidth * _ScaleRatioA - _FaceDilate * _ScaleRatioA) / 2; + return o; + } + + uniform sampler2D _MainTex; + + float4 frag(v2f i) : COLOR + { + fixed4 texcol = tex2D(_MainTex, i.uv).a; + clip(texcol.a - i.alphaClip); + SHADOW_CASTER_FRAGMENT(i) + } + ENDCG + } +} + +CustomEditor "TMPro.EditorUtilities.TMP_SDFShaderGUI" +} diff --git a/Assets/Resources/TextMesh Pro/Shaders/TMP_SDF-Surface-Mobile.shader.meta b/Assets/Resources/TextMesh Pro/Shaders/TMP_SDF-Surface-Mobile.shader.meta new file mode 100644 index 0000000..bff8b7a --- /dev/null +++ b/Assets/Resources/TextMesh Pro/Shaders/TMP_SDF-Surface-Mobile.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 85187c2149c549c5b33f0cdb02836b17 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/TextMesh Pro/Shaders/TMP_SDF-Surface.shader b/Assets/Resources/TextMesh Pro/Shaders/TMP_SDF-Surface.shader new file mode 100644 index 0000000..281e60d --- /dev/null +++ b/Assets/Resources/TextMesh Pro/Shaders/TMP_SDF-Surface.shader @@ -0,0 +1,159 @@ +Shader "TextMeshPro/Distance Field (Surface)" { + +Properties { + _FaceTex ("Fill Texture", 2D) = "white" {} + _FaceUVSpeedX ("Face UV Speed X", Range(-5, 5)) = 0.0 + _FaceUVSpeedY ("Face UV Speed Y", Range(-5, 5)) = 0.0 + _FaceColor ("Fill Color", Color) = (1,1,1,1) + _FaceDilate ("Face Dilate", Range(-1,1)) = 0 + + _OutlineColor ("Outline Color", Color) = (0,0,0,1) + _OutlineTex ("Outline Texture", 2D) = "white" {} + _OutlineUVSpeedX ("Outline UV Speed X", Range(-5, 5)) = 0.0 + _OutlineUVSpeedY ("Outline UV Speed Y", Range(-5, 5)) = 0.0 + _OutlineWidth ("Outline Thickness", Range(0, 1)) = 0 + _OutlineSoftness ("Outline Softness", Range(0,1)) = 0 + + _Bevel ("Bevel", Range(0,1)) = 0.5 + _BevelOffset ("Bevel Offset", Range(-0.5,0.5)) = 0 + _BevelWidth ("Bevel Width", Range(-.5,0.5)) = 0 + _BevelClamp ("Bevel Clamp", Range(0,1)) = 0 + _BevelRoundness ("Bevel Roundness", Range(0,1)) = 0 + + _BumpMap ("Normalmap", 2D) = "bump" {} + _BumpOutline ("Bump Outline", Range(0,1)) = 0.5 + _BumpFace ("Bump Face", Range(0,1)) = 0.5 + + _ReflectFaceColor ("Face Color", Color) = (0,0,0,1) + _ReflectOutlineColor ("Outline Color", Color) = (0,0,0,1) + _Cube ("Reflection Cubemap", Cube) = "black" { /* TexGen CubeReflect */ } + _EnvMatrixRotation ("Texture Rotation", vector) = (0, 0, 0, 0) + _SpecColor ("Specular Color", Color) = (0,0,0,1) + + _FaceShininess ("Face Shininess", Range(0,1)) = 0 + _OutlineShininess ("Outline Shininess", Range(0,1)) = 0 + + _GlowColor ("Color", Color) = (0, 1, 0, 0.5) + _GlowOffset ("Offset", Range(-1,1)) = 0 + _GlowInner ("Inner", Range(0,1)) = 0.05 + _GlowOuter ("Outer", Range(0,1)) = 0.05 + _GlowPower ("Falloff", Range(1, 0)) = 0.75 + + _WeightNormal ("Weight Normal", float) = 0 + _WeightBold ("Weight Bold", float) = 0.5 + + // Should not be directly exposed to the user + _ShaderFlags ("Flags", float) = 0 + _ScaleRatioA ("Scale RatioA", float) = 1 + _ScaleRatioB ("Scale RatioB", float) = 1 + _ScaleRatioC ("Scale RatioC", float) = 1 + + _MainTex ("Font Atlas", 2D) = "white" {} + _TextureWidth ("Texture Width", float) = 512 + _TextureHeight ("Texture Height", float) = 512 + _GradientScale ("Gradient Scale", float) = 5.0 + _ScaleX ("Scale X", float) = 1.0 + _ScaleY ("Scale Y", float) = 1.0 + _PerspectiveFilter ("Perspective Correction", Range(0, 1)) = 0.875 + _Sharpness ("Sharpness", Range(-1,1)) = 0 + + _VertexOffsetX ("Vertex OffsetX", float) = 0 + _VertexOffsetY ("Vertex OffsetY", float) = 0 + + _CullMode ("Cull Mode", Float) = 0 + //_MaskCoord ("Mask Coords", vector) = (0,0,0,0) + //_MaskSoftness ("Mask Softness", float) = 0 +} + +SubShader { + + Tags { "Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent" } + + LOD 300 + Cull [_CullMode] + + CGPROGRAM + #pragma surface PixShader BlinnPhong alpha:blend vertex:VertShader nolightmap nodirlightmap + #pragma target 3.0 + #pragma shader_feature __ GLOW_ON + #pragma glsl + + #include "TMPro_Properties.cginc" + #include "TMPro.cginc" + + half _FaceShininess; + half _OutlineShininess; + + struct Input + { + fixed4 color : COLOR; + float2 uv_MainTex; + float2 uv2_FaceTex; + float2 uv2_OutlineTex; + float2 param; // Weight, Scale + float3 viewDirEnv; + }; + + + #define BEVEL_ON 1 + #include "TMPro_Surface.cginc" + + ENDCG + + // Pass to render object as a shadow caster + Pass + { + Name "Caster" + Tags { "LightMode" = "ShadowCaster" } + Offset 1, 1 + + Fog {Mode Off} + ZWrite On + ZTest LEqual + Cull Off + + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + #pragma multi_compile_shadowcaster + #include "UnityCG.cginc" + + struct v2f + { + V2F_SHADOW_CASTER; + float2 uv : TEXCOORD1; + float2 uv2 : TEXCOORD3; + float alphaClip : TEXCOORD2; + }; + + uniform float4 _MainTex_ST; + uniform float4 _OutlineTex_ST; + float _OutlineWidth; + float _FaceDilate; + float _ScaleRatioA; + + v2f vert( appdata_base v ) + { + v2f o; + TRANSFER_SHADOW_CASTER(o) + o.uv = TRANSFORM_TEX(v.texcoord, _MainTex); + o.uv2 = TRANSFORM_TEX(v.texcoord, _OutlineTex); + o.alphaClip = (1.0 - _OutlineWidth * _ScaleRatioA - _FaceDilate * _ScaleRatioA) / 2; + return o; + } + + uniform sampler2D _MainTex; + + float4 frag(v2f i) : COLOR + { + fixed4 texcol = tex2D(_MainTex, i.uv).a; + clip(texcol.a - i.alphaClip); + SHADOW_CASTER_FRAGMENT(i) + } + ENDCG + } +} + +CustomEditor "TMPro.EditorUtilities.TMP_SDFShaderGUI" +} + diff --git a/Assets/Resources/TextMesh Pro/Shaders/TMP_SDF-Surface.shader.meta b/Assets/Resources/TextMesh Pro/Shaders/TMP_SDF-Surface.shader.meta new file mode 100644 index 0000000..26e814c --- /dev/null +++ b/Assets/Resources/TextMesh Pro/Shaders/TMP_SDF-Surface.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: f7ada0af4f174f0694ca6a487b8f543d +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/TextMesh Pro/Shaders/TMP_SDF-URP Lit.shadergraph b/Assets/Resources/TextMesh Pro/Shaders/TMP_SDF-URP Lit.shadergraph new file mode 100644 index 0000000..c3428c6 --- /dev/null +++ b/Assets/Resources/TextMesh Pro/Shaders/TMP_SDF-URP Lit.shadergraph @@ -0,0 +1,11457 @@ +{ + "m_SGVersion": 2, + "m_Type": "UnityEditor.ShaderGraph.GraphData", + "m_ObjectId": "386c36a1c4c34ea29deb680fb82cfe8b", + "m_Properties": [ + { + "m_Id": "dc75c4e3a1bc4bb0a128086c2b0679a5" + }, + { + "m_Id": "867a4ae13c0d4a028c71bc1063824c14" + }, + { + "m_Id": "22b7f3c2bb7b48c0a7fdeb50e33e7d5e" + }, + { + "m_Id": "53073e5ea924459fa6681a4943e9f947" + }, + { + "m_Id": "7a046f410ce64aa88438b0bfd412c045" + }, + { + "m_Id": "636180f6e0504f2baaa5cc086980cb47" + }, + { + "m_Id": "74b41464cbed4e9e8e23af5ab9be40cf" + }, + { + "m_Id": "8ed907a2cc7949b68a283ae243ea1977" + }, + { + "m_Id": "cb3c0c3f08654b068bea44c4ffb15f4a" + }, + { + "m_Id": "0580d4b7e3a049049569f4508643a724" + }, + { + "m_Id": "c9ec735d1a1046769e5601b2c97c849a" + }, + { + "m_Id": "2d0a269511e34bd1ba9056d2c939dff2" + }, + { + "m_Id": "07946387933e416db576b677f0711e5f" + }, + { + "m_Id": "46fbf3eeb0ea4470869cba7443249295" + }, + { + "m_Id": "ec79eb447dfd47a9b3380344c6a60f43" + }, + { + "m_Id": "3fdf4b7bc5d4426492dcc057603ef4a6" + }, + { + "m_Id": "8cf8aae64c1d443f9303126886b40f17" + }, + { + "m_Id": "49e7c3ad55ce458797f0e60c950cb965" + }, + { + "m_Id": "81e8ed0534534674a74263e6161a2a1a" + }, + { + "m_Id": "952d0fa5cd744df0b434cd38e9a90b93" + }, + { + "m_Id": "21a7a380e66d42e780e2a2a1baa630d5" + }, + { + "m_Id": "2c10b97b92c947ceb307a93759c0228b" + }, + { + "m_Id": "1be90d4f96a841748b0c95219b12ad27" + }, + { + "m_Id": "5fbe253f3e444f2aa8ac717f9c856619" + }, + { + "m_Id": "5bd258837c514ff7ab0bf7027e762c18" + }, + { + "m_Id": "998db5e5901e45b29040eb2099370071" + }, + { + "m_Id": "a6c38edd2e8743a9b057ba8452b9f129" + }, + { + "m_Id": "82af2db1018543d7832af96c1cfc981f" + }, + { + "m_Id": "3ec4797e381747829ef4712c85fcf7a1" + }, + { + "m_Id": "b0b352c4503a43d083a64e57352b29a0" + }, + { + "m_Id": "424dbeeb009344efa29c304c4979e3d6" + }, + { + "m_Id": "05805bc6fcc941fd889922555c6c86d7" + }, + { + "m_Id": "a4ad98d8828c424384229c344ebe2ed0" + }, + { + "m_Id": "3e372195f4bd4845852a37839e5b602d" + }, + { + "m_Id": "a6bbb32e8d884be9bb36db91fe4b81b1" + } + ], + "m_Keywords": [], + "m_Nodes": [ + { + "m_Id": "b1188549725543d485436c2e921ffbb2" + }, + { + "m_Id": "4488af8ff6a7421298a7e827f567263b" + }, + { + "m_Id": "7e0fadb2533f496192c1ad3e78642010" + }, + { + "m_Id": "aa87c72ac0e64469acc34f936f00b3d0" + }, + { + "m_Id": "105b1ed1aa714e41bbe1ef5472bdb11f" + }, + { + "m_Id": "150533bad8e2424aaa2c74e253af8592" + }, + { + "m_Id": "1c4df61c2fea404eb3b87b270d7c59bc" + }, + { + "m_Id": "8135ca333f8f4ea78163743e6ec1f55c" + }, + { + "m_Id": "36f1b4d96f2941c39e5cd95d9c1d2ce6" + }, + { + "m_Id": "9c228fac287d446296b91a4acf5cec59" + }, + { + "m_Id": "52798bdb86f6400e86489a7a368e9f8b" + }, + { + "m_Id": "f383b24f0bc6434dafe44b3e3d338a63" + }, + { + "m_Id": "85a1ad8e741e41759002e8cdc8cd0b96" + }, + { + "m_Id": "f3d31c1f18d8491a8ecf5cbc37e4b7db" + }, + { + "m_Id": "f23a8b2b7c85478388ff7a8c8a6de740" + }, + { + "m_Id": "e818605f8f5a4f01bf61caaa33693581" + }, + { + "m_Id": "85b5940eb77e4625812ded7215bab8d7" + }, + { + "m_Id": "cdddee3a537c464697357f11b966f9b8" + }, + { + "m_Id": "88253223d2c34ecfab92b0c344048f94" + }, + { + "m_Id": "c7ddee91dc5b48dc828309c77fdb0b88" + }, + { + "m_Id": "1e12726617b24675958e942eb62e4b09" + }, + { + "m_Id": "2ac79705aa9e415dbb74ec215233fd1b" + }, + { + "m_Id": "44317f2e371447e2a8d894f8a021a235" + }, + { + "m_Id": "7984fd094e1147bdabb4e26fbd3d31c8" + }, + { + "m_Id": "91890fe48ebe4717aea61ecaf3ad4861" + }, + { + "m_Id": "19075add867e4757b9520d18fe8de1d0" + }, + { + "m_Id": "fdb77c3e92ee497b88ca5dc46dc45350" + }, + { + "m_Id": "c234e5216678436195ee1a5914bc79da" + }, + { + "m_Id": "4648b46ad29a4008a80de4f8a5a5b813" + }, + { + "m_Id": "59bd90a849624124bae6464ee3669aa6" + }, + { + "m_Id": "a535f3bcbeb14622bb177eb6f46e76f4" + }, + { + "m_Id": "9e87ce9607e14015a3790c528ca5dfda" + }, + { + "m_Id": "285f6a9863d54ed2a8150727ad749456" + }, + { + "m_Id": "b163c9f1666644b0bba62cf0e12df7bc" + }, + { + "m_Id": "a455bd79094c4413a7b7dd80ca8b9368" + }, + { + "m_Id": "dbcb748279484a4590e53518c49122b8" + }, + { + "m_Id": "04dc152dd2ba4d519391577eb1156235" + }, + { + "m_Id": "9f0de188085746d5a19073da1de85ddb" + }, + { + "m_Id": "ec184d6d9fb2494897774c9e7d279e6d" + }, + { + "m_Id": "95928bcb6a284b8d88105a84c2e1d3ce" + }, + { + "m_Id": "4f194ff591484e908fc2bcdacbcf2570" + }, + { + "m_Id": "6e8946a245e842b38231d4a241bfb3ef" + }, + { + "m_Id": "cb7117ecb1d047a8b2cb00ed552cb181" + }, + { + "m_Id": "3c50439118b2496f9e390021b0964606" + }, + { + "m_Id": "3e231021af7b47ba97f2871e7f25d0fe" + }, + { + "m_Id": "aa3e347d733e48f7b65d8a8847370eec" + }, + { + "m_Id": "2a552a0b828f457c911aa19561e410ae" + }, + { + "m_Id": "acd0cd5a177f4a97bf23db7219305e3f" + }, + { + "m_Id": "51378bae98a94c309785d14cd5cbb453" + }, + { + "m_Id": "9e6e50a71d9843b49b62ebe1cf7d3d59" + }, + { + "m_Id": "7444469eb9884253819add9ef96baa25" + }, + { + "m_Id": "67a519f507384ff1861df5d8d5b486be" + }, + { + "m_Id": "48390d02257d41bf98eace1deaa4c539" + }, + { + "m_Id": "f4ecc442a2d246759f7c2c0412953d28" + }, + { + "m_Id": "7f2e6b5f15364ed9835d67d0cf4f8f65" + }, + { + "m_Id": "aca823a8188948c782eddaf0f45e1868" + }, + { + "m_Id": "7d78a616c2754cc28d1f32cf66ade611" + }, + { + "m_Id": "163beb4431c34f538340bc0af0991e6f" + }, + { + "m_Id": "39f2f84f30304d859fb07569e2695f60" + }, + { + "m_Id": "42a586e4f6ec40eeaba891b7fd133864" + }, + { + "m_Id": "4abff6ff92fa4a05b203f10580988335" + }, + { + "m_Id": "319916a5921343f7b7eef0e50dc93def" + }, + { + "m_Id": "f814deb543c24fbbafbcdb5071d96022" + }, + { + "m_Id": "65c8e64a7535466e933eed08a2f77532" + }, + { + "m_Id": "63c7cd57fc3c45a9a97b514fdae32693" + }, + { + "m_Id": "d4df208fc23b42f2b52364124f1b661c" + }, + { + "m_Id": "9d3c3383d5934a17bf9efbb7fd9e9043" + }, + { + "m_Id": "aef5c44f84e04c3185e0b93e95e34204" + }, + { + "m_Id": "c9d7f0dbae7d422985a1cc87c025e76b" + }, + { + "m_Id": "faace8101df943d8956faa31728cb004" + }, + { + "m_Id": "007c75c776ac4f1babe9cd7ae1fc4f14" + }, + { + "m_Id": "b571db753a1948d5a6f1de4e7d0c7238" + }, + { + "m_Id": "9147636b0cfa466a9b37a013d8f693bf" + }, + { + "m_Id": "bc9afcb18afa4ccc82d2cdc34d3f4641" + }, + { + "m_Id": "b4a40cb6acd441acb83cfe0240bf910d" + }, + { + "m_Id": "56c25395796e4d2fbe5c892d428d1620" + }, + { + "m_Id": "6b2f65c1463f4f7bad16c54a95d2fe75" + }, + { + "m_Id": "109f638d1f9b49d4991d6d21a86d4eb7" + }, + { + "m_Id": "dff7a66b353a4023b29c9d937da77960" + }, + { + "m_Id": "7a80e8839f0e4a1d9a6c0814f8793ee6" + }, + { + "m_Id": "7d7696aa6d184b4fb9c316a9dec37aee" + }, + { + "m_Id": "ec1f2e8bc9fd4ae38b133c60ee6c49b8" + }, + { + "m_Id": "2db15d90c2204143b225ec4ef08d0755" + }, + { + "m_Id": "86e21b7b6b7a44238607e41b8a9fb9a4" + }, + { + "m_Id": "0c10df95ee1d4b0a8a00558af49ec45f" + }, + { + "m_Id": "e591df3a1eb94e259b762f2830b407e2" + }, + { + "m_Id": "83c51d5b2f7b4eb785248f419181cb87" + }, + { + "m_Id": "ad3e1d26f4404555a8dd29223caaf1ef" + } + ], + "m_GroupDatas": [ + { + "m_Id": "484b51c50485473b819c4f05087b32d7" + }, + { + "m_Id": "d0a791a544614667962a9a9a9ce0c68a" + }, + { + "m_Id": "42cadae0923e4969b50bbc3f78185934" + }, + { + "m_Id": "ecf16c34d46f4502ac601f0c38c7576b" + }, + { + "m_Id": "98934a69591249d5b8b92b39045359a3" + }, + { + "m_Id": "013228b0fdf1424097798f0973a9a4fb" + }, + { + "m_Id": "d258902c6ec74942afdb9ebf8c1d07f8" + }, + { + "m_Id": "daaf032a109749a88c9b8ff8e1f8b541" + } + ], + "m_StickyNoteDatas": [], + "m_Edges": [ + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "007c75c776ac4f1babe9cd7ae1fc4f14" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "b571db753a1948d5a6f1de4e7d0c7238" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "04dc152dd2ba4d519391577eb1156235" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "b163c9f1666644b0bba62cf0e12df7bc" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "105b1ed1aa714e41bbe1ef5472bdb11f" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "b4a40cb6acd441acb83cfe0240bf910d" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "109f638d1f9b49d4991d6d21a86d4eb7" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "ec1f2e8bc9fd4ae38b133c60ee6c49b8" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "150533bad8e2424aaa2c74e253af8592" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "319916a5921343f7b7eef0e50dc93def" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "150533bad8e2424aaa2c74e253af8592" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "65c8e64a7535466e933eed08a2f77532" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "150533bad8e2424aaa2c74e253af8592" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "9c228fac287d446296b91a4acf5cec59" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "150533bad8e2424aaa2c74e253af8592" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "f814deb543c24fbbafbcdb5071d96022" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "163beb4431c34f538340bc0af0991e6f" + }, + "m_SlotId": 4 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "7984fd094e1147bdabb4e26fbd3d31c8" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "19075add867e4757b9520d18fe8de1d0" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "e818605f8f5a4f01bf61caaa33693581" + }, + "m_SlotId": 5 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "1c4df61c2fea404eb3b87b270d7c59bc" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "e818605f8f5a4f01bf61caaa33693581" + }, + "m_SlotId": 4 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "1e12726617b24675958e942eb62e4b09" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "dff7a66b353a4023b29c9d937da77960" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "285f6a9863d54ed2a8150727ad749456" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "59bd90a849624124bae6464ee3669aa6" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "2a552a0b828f457c911aa19561e410ae" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "51378bae98a94c309785d14cd5cbb453" + }, + "m_SlotId": 6 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "2ac79705aa9e415dbb74ec215233fd1b" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "7984fd094e1147bdabb4e26fbd3d31c8" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "2db15d90c2204143b225ec4ef08d0755" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "fdb77c3e92ee497b88ca5dc46dc45350" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "319916a5921343f7b7eef0e50dc93def" + }, + "m_SlotId": 7 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "4abff6ff92fa4a05b203f10580988335" + }, + "m_SlotId": 2 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "36f1b4d96f2941c39e5cd95d9c1d2ce6" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "85a1ad8e741e41759002e8cdc8cd0b96" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "39f2f84f30304d859fb07569e2695f60" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "163beb4431c34f538340bc0af0991e6f" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "3e231021af7b47ba97f2871e7f25d0fe" + }, + "m_SlotId": 5 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "6e8946a245e842b38231d4a241bfb3ef" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "42a586e4f6ec40eeaba891b7fd133864" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "cdddee3a537c464697357f11b966f9b8" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "44317f2e371447e2a8d894f8a021a235" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "2ac79705aa9e415dbb74ec215233fd1b" + }, + "m_SlotId": 3 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "4488af8ff6a7421298a7e827f567263b" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "44317f2e371447e2a8d894f8a021a235" + }, + "m_SlotId": 3 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "4648b46ad29a4008a80de4f8a5a5b813" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "c234e5216678436195ee1a5914bc79da" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "4abff6ff92fa4a05b203f10580988335" + }, + "m_SlotId": 4 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "e818605f8f5a4f01bf61caaa33693581" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "4f194ff591484e908fc2bcdacbcf2570" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "9f0de188085746d5a19073da1de85ddb" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "51378bae98a94c309785d14cd5cbb453" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "aa3e347d733e48f7b65d8a8847370eec" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "51378bae98a94c309785d14cd5cbb453" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "aca823a8188948c782eddaf0f45e1868" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "52798bdb86f6400e86489a7a368e9f8b" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "f383b24f0bc6434dafe44b3e3d338a63" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "56c25395796e4d2fbe5c892d428d1620" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "7a80e8839f0e4a1d9a6c0814f8793ee6" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "59bd90a849624124bae6464ee3669aa6" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "f23a8b2b7c85478388ff7a8c8a6de740" + }, + "m_SlotId": 4 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "63c7cd57fc3c45a9a97b514fdae32693" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "56c25395796e4d2fbe5c892d428d1620" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "65c8e64a7535466e933eed08a2f77532" + }, + "m_SlotId": 7 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "4abff6ff92fa4a05b203f10580988335" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "67a519f507384ff1861df5d8d5b486be" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "51378bae98a94c309785d14cd5cbb453" + }, + "m_SlotId": 4 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "6b2f65c1463f4f7bad16c54a95d2fe75" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "7d7696aa6d184b4fb9c316a9dec37aee" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "7444469eb9884253819add9ef96baa25" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "51378bae98a94c309785d14cd5cbb453" + }, + "m_SlotId": 2 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "7984fd094e1147bdabb4e26fbd3d31c8" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "91890fe48ebe4717aea61ecaf3ad4861" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "7a80e8839f0e4a1d9a6c0814f8793ee6" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "65c8e64a7535466e933eed08a2f77532" + }, + "m_SlotId": 2 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "7d7696aa6d184b4fb9c316a9dec37aee" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "319916a5921343f7b7eef0e50dc93def" + }, + "m_SlotId": 2 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "7d78a616c2754cc28d1f32cf66ade611" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "f23a8b2b7c85478388ff7a8c8a6de740" + }, + "m_SlotId": 3 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "7e0fadb2533f496192c1ad3e78642010" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "88253223d2c34ecfab92b0c344048f94" + }, + "m_SlotId": 5 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "8135ca333f8f4ea78163743e6ec1f55c" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "f23a8b2b7c85478388ff7a8c8a6de740" + }, + "m_SlotId": 5 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "85a1ad8e741e41759002e8cdc8cd0b96" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "88253223d2c34ecfab92b0c344048f94" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "85a1ad8e741e41759002e8cdc8cd0b96" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "e818605f8f5a4f01bf61caaa33693581" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "85b5940eb77e4625812ded7215bab8d7" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "f23a8b2b7c85478388ff7a8c8a6de740" + }, + "m_SlotId": 6 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "88253223d2c34ecfab92b0c344048f94" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "44317f2e371447e2a8d894f8a021a235" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "9147636b0cfa466a9b37a013d8f693bf" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "faace8101df943d8956faa31728cb004" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "91890fe48ebe4717aea61ecaf3ad4861" + }, + "m_SlotId": 1 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "3e231021af7b47ba97f2871e7f25d0fe" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "91890fe48ebe4717aea61ecaf3ad4861" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "3e231021af7b47ba97f2871e7f25d0fe" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "91890fe48ebe4717aea61ecaf3ad4861" + }, + "m_SlotId": 3 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "3e231021af7b47ba97f2871e7f25d0fe" + }, + "m_SlotId": 2 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "91890fe48ebe4717aea61ecaf3ad4861" + }, + "m_SlotId": 4 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "cb7117ecb1d047a8b2cb00ed552cb181" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "95928bcb6a284b8d88105a84c2e1d3ce" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "a455bd79094c4413a7b7dd80ca8b9368" + }, + "m_SlotId": 4 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "9c228fac287d446296b91a4acf5cec59" + }, + "m_SlotId": 7 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "4abff6ff92fa4a05b203f10580988335" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "9d3c3383d5934a17bf9efbb7fd9e9043" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "7a80e8839f0e4a1d9a6c0814f8793ee6" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "9d3c3383d5934a17bf9efbb7fd9e9043" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "7d7696aa6d184b4fb9c316a9dec37aee" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "9d3c3383d5934a17bf9efbb7fd9e9043" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "ec1f2e8bc9fd4ae38b133c60ee6c49b8" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "9e6e50a71d9843b49b62ebe1cf7d3d59" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "acd0cd5a177f4a97bf23db7219305e3f" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "9e87ce9607e14015a3790c528ca5dfda" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "c234e5216678436195ee1a5914bc79da" + }, + "m_SlotId": 4 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "9f0de188085746d5a19073da1de85ddb" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "7d78a616c2754cc28d1f32cf66ade611" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "a455bd79094c4413a7b7dd80ca8b9368" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "b163c9f1666644b0bba62cf0e12df7bc" + }, + "m_SlotId": 2 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "a535f3bcbeb14622bb177eb6f46e76f4" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "c234e5216678436195ee1a5914bc79da" + }, + "m_SlotId": 3 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "aa3e347d733e48f7b65d8a8847370eec" + }, + "m_SlotId": 1 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "2ac79705aa9e415dbb74ec215233fd1b" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "aa87c72ac0e64469acc34f936f00b3d0" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "88253223d2c34ecfab92b0c344048f94" + }, + "m_SlotId": 4 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "acd0cd5a177f4a97bf23db7219305e3f" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "51378bae98a94c309785d14cd5cbb453" + }, + "m_SlotId": 5 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "acd0cd5a177f4a97bf23db7219305e3f" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "51378bae98a94c309785d14cd5cbb453" + }, + "m_SlotId": 7 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "aef5c44f84e04c3185e0b93e95e34204" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "109f638d1f9b49d4991d6d21a86d4eb7" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "b1188549725543d485436c2e921ffbb2" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "7d78a616c2754cc28d1f32cf66ade611" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "b163c9f1666644b0bba62cf0e12df7bc" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "9f0de188085746d5a19073da1de85ddb" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "b4a40cb6acd441acb83cfe0240bf910d" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "dff7a66b353a4023b29c9d937da77960" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "b571db753a1948d5a6f1de4e7d0c7238" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "bc9afcb18afa4ccc82d2cdc34d3f4641" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "b571db753a1948d5a6f1de4e7d0c7238" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "bc9afcb18afa4ccc82d2cdc34d3f4641" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "bc9afcb18afa4ccc82d2cdc34d3f4641" + }, + "m_SlotId": 6 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "faace8101df943d8956faa31728cb004" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "c234e5216678436195ee1a5914bc79da" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "fdb77c3e92ee497b88ca5dc46dc45350" + }, + "m_SlotId": 2 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "c7ddee91dc5b48dc828309c77fdb0b88" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "88253223d2c34ecfab92b0c344048f94" + }, + "m_SlotId": 3 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "c9d7f0dbae7d422985a1cc87c025e76b" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "e818605f8f5a4f01bf61caaa33693581" + }, + "m_SlotId": 6 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "cdddee3a537c464697357f11b966f9b8" + }, + "m_SlotId": 7 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "88253223d2c34ecfab92b0c344048f94" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "d4df208fc23b42f2b52364124f1b661c" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "6b2f65c1463f4f7bad16c54a95d2fe75" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "dbcb748279484a4590e53518c49122b8" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "a455bd79094c4413a7b7dd80ca8b9368" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "dff7a66b353a4023b29c9d937da77960" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "cdddee3a537c464697357f11b966f9b8" + }, + "m_SlotId": 2 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "e818605f8f5a4f01bf61caaa33693581" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "f23a8b2b7c85478388ff7a8c8a6de740" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "ec184d6d9fb2494897774c9e7d279e6d" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "a455bd79094c4413a7b7dd80ca8b9368" + }, + "m_SlotId": 3 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "ec1f2e8bc9fd4ae38b133c60ee6c49b8" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "f814deb543c24fbbafbcdb5071d96022" + }, + "m_SlotId": 2 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "f23a8b2b7c85478388ff7a8c8a6de740" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "aa3e347d733e48f7b65d8a8847370eec" + }, + "m_SlotId": 2 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "f383b24f0bc6434dafe44b3e3d338a63" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "85a1ad8e741e41759002e8cdc8cd0b96" + }, + "m_SlotId": 3 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "f3d31c1f18d8491a8ecf5cbc37e4b7db" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "e818605f8f5a4f01bf61caaa33693581" + }, + "m_SlotId": 3 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "f814deb543c24fbbafbcdb5071d96022" + }, + "m_SlotId": 7 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "4abff6ff92fa4a05b203f10580988335" + }, + "m_SlotId": 3 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "faace8101df943d8956faa31728cb004" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "109f638d1f9b49d4991d6d21a86d4eb7" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "faace8101df943d8956faa31728cb004" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "56c25395796e4d2fbe5c892d428d1620" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "faace8101df943d8956faa31728cb004" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "6b2f65c1463f4f7bad16c54a95d2fe75" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "faace8101df943d8956faa31728cb004" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "b4a40cb6acd441acb83cfe0240bf910d" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "fdb77c3e92ee497b88ca5dc46dc45350" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "59bd90a849624124bae6464ee3669aa6" + }, + "m_SlotId": 1 + } + } + ], + "m_VertexContext": { + "m_Position": { + "x": -2506.000244140625, + "y": -3749.0 + }, + "m_Blocks": [ + { + "m_Id": "48390d02257d41bf98eace1deaa4c539" + }, + { + "m_Id": "f4ecc442a2d246759f7c2c0412953d28" + }, + { + "m_Id": "7f2e6b5f15364ed9835d67d0cf4f8f65" + } + ] + }, + "m_FragmentContext": { + "m_Position": { + "x": -2506.000244140625, + "y": -3480.0 + }, + "m_Blocks": [ + { + "m_Id": "aca823a8188948c782eddaf0f45e1868" + }, + { + "m_Id": "6e8946a245e842b38231d4a241bfb3ef" + }, + { + "m_Id": "cb7117ecb1d047a8b2cb00ed552cb181" + }, + { + "m_Id": "3c50439118b2496f9e390021b0964606" + }, + { + "m_Id": "86e21b7b6b7a44238607e41b8a9fb9a4" + }, + { + "m_Id": "0c10df95ee1d4b0a8a00558af49ec45f" + }, + { + "m_Id": "e591df3a1eb94e259b762f2830b407e2" + }, + { + "m_Id": "83c51d5b2f7b4eb785248f419181cb87" + }, + { + "m_Id": "ad3e1d26f4404555a8dd29223caaf1ef" + } + ] + }, + "m_PreviewData": { + "serializedMesh": { + "m_SerializedMesh": "{\"mesh\":{\"fileID\":10210,\"guid\":\"0000000000000000e000000000000000\",\"type\":0}}", + "m_Guid": "" + } + }, + "m_Path": "TextMeshPro/SRP", + "m_ConcretePrecision": 0, + "m_PreviewMode": 2, + "m_OutputNode": { + "m_Id": "" + }, + "m_ActiveTargets": [ + { + "m_Id": "94300469581b4924ac7dda496811d45d" + } + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "007c75c776ac4f1babe9cd7ae1fc4f14", + "m_Group": { + "m_Id": "daaf032a109749a88c9b8ff8e1f8b541" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -5722.99951171875, + "y": -3827.0, + "width": 134.0, + "height": 34.0 + } + }, + "m_Slots": [ + { + "m_Id": "1356dc7cbdfa4199a6535d3bbf4cd536" + } + ], + "synonyms": [], + "m_Precision": 1, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "3e372195f4bd4845852a37839e5b602d" + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.Rendering.HighDefinition.ShaderGraph.BuiltinData", + "m_ObjectId": "00996039d61e400a9e854ce591ac35a0", + "m_Distortion": false, + "m_DistortionMode": 0, + "m_DistortionDepthTest": true, + "m_AddPrecomputedVelocity": false, + "m_TransparentWritesMotionVec": false, + "m_AlphaToMask": false, + "m_DepthOffset": false, + "m_TransparencyFog": true, + "m_AlphaTestShadow": false, + "m_BackThenFrontRendering": false, + "m_TransparentDepthPrepass": false, + "m_TransparentDepthPostpass": false, + "m_SupportLodCrossFade": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.GroupData", + "m_ObjectId": "013228b0fdf1424097798f0973a9a4fb", + "m_Title": "Face Texture", + "m_Position": { + "x": -4813.0, + "y": -2949.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "02559cbe5ad441a3904ccb75ded2b2c5", + "m_Id": 5, + "m_DisplayName": "Color2", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Color2", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "03182b3263304258b265266325c21f65", + "m_Id": 0, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "045c4f6b050549c7a0efb208e6349779", + "m_Id": 7, + "m_DisplayName": "A", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "04dc152dd2ba4d519391577eb1156235", + "m_Group": { + "m_Id": "013228b0fdf1424097798f0973a9a4fb" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4536.00048828125, + "y": -2723.000244140625, + "width": 151.0, + "height": 34.0 + } + }, + "m_Slots": [ + { + "m_Id": "3d04f5ba6e7b40d281f22eb424145acd" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "c9ec735d1a1046769e5601b2c97c849a" + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "04dfcc9ff13a4bf282ed46faec39d15c", + "m_Id": 4, + "m_DisplayName": "R", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "R", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.Internal.Vector1ShaderProperty", + "m_ObjectId": "05805bc6fcc941fd889922555c6c86d7", + "m_Guid": { + "m_GuidSerialized": "fe84e680-4cee-4ca5-be86-2e293a9ba093" + }, + "m_Name": "Ambient Shadow", + "m_DefaultReferenceName": "Vector1_05805bc6fcc941fd889922555c6c86d7", + "m_OverrideReferenceName": "_Ambient", + "m_GeneratePropertyBlock": true, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": 0.30000001192092898, + "m_FloatType": 1, + "m_RangeValues": { + "x": 0.0, + "y": 1.0 + } +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.Internal.Vector4ShaderProperty", + "m_ObjectId": "0580d4b7e3a049049569f4508643a724", + "m_Guid": { + "m_GuidSerialized": "eefb88c5-7665-45dc-b3c2-7cf98b9990d6" + }, + "m_Name": "Softness", + "m_DefaultReferenceName": "Vector4_D64EC33D", + "m_OverrideReferenceName": "_Softness", + "m_GeneratePropertyBlock": true, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicValueMaterialSlot", + "m_ObjectId": "068ae649e00b40e198ec5a30ad741fab", + "m_Id": 2, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "e00": 0.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 0.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 0.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 0.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "0699eea947fc426cbfeb8744cf120222", + "m_Id": 1, + "m_DisplayName": "Color", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Color", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.Internal.Vector4ShaderProperty", + "m_ObjectId": "07946387933e416db576b677f0711e5f", + "m_Guid": { + "m_GuidSerialized": "21d612fb-8153-41f8-9e2f-9de044c19fbf" + }, + "m_Name": "_FaceTex_ST", + "m_DefaultReferenceName": "Vector4_1A08AD4A", + "m_OverrideReferenceName": "_FaceTex_ST", + "m_GeneratePropertyBlock": true, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": { + "x": 2.0, + "y": 2.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "0801f576ce79452483b42e485405244d", + "m_Id": 0, + "m_DisplayName": "Smoothness", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Smoothness", + "m_StageCapability": 2, + "m_Value": 0.5, + "m_DefaultValue": 0.5, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicValueMaterialSlot", + "m_ObjectId": "082e9706dffc4c188270980d4e44ce0f", + "m_Id": 0, + "m_DisplayName": "A", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 3, + "m_Value": { + "e00": 0.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 0.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 0.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 0.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "0848ba750e0341198cf0bbd413e0efe4", + "m_Id": 0, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "09b1b86c1c074337a4c439d3a308dd2e", + "m_Id": 7, + "m_DisplayName": "A", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "0a67ca5280214bd794dc0ad66b5710a9", + "m_Id": 4, + "m_DisplayName": "R", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "R", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "0b57f2d35157477ab2b29a5aac14ae8b", + "m_Id": 1, + "m_DisplayName": "B", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 3, + "m_Value": { + "x": 1.0, + "y": 1.0, + "z": 1.0, + "w": 1.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "0ba4932e164847878ddb7b7bcff96985", + "m_Id": 1, + "m_DisplayName": "B", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 3, + "m_Value": { + "x": 1.0, + "y": 1.0, + "z": 1.0, + "w": 1.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BlockNode", + "m_ObjectId": "0c10df95ee1d4b0a8a00558af49ec45f", + "m_Group": { + "m_Id": "" + }, + "m_Name": "SurfaceDescription.NormalTS", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": 0.0, + "y": 0.0, + "width": 0.0, + "height": 0.0 + } + }, + "m_Slots": [ + { + "m_Id": "a0206f980dc6455f84f5a8442838c726" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SerializedDescriptor": "SurfaceDescription.NormalTS" +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "0c4dc51f26484c26ad88a3fe4002abcd", + "m_Id": 2, + "m_DisplayName": "Color (1)", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Color", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicValueMaterialSlot", + "m_ObjectId": "0d6a57754b824f6db9cefa6953bc06a9", + "m_Id": 1, + "m_DisplayName": "B", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 3, + "m_Value": { + "e00": 2.0, + "e01": 2.0, + "e02": 2.0, + "e03": 2.0, + "e10": 2.0, + "e11": 2.0, + "e12": 2.0, + "e13": 2.0, + "e20": 2.0, + "e21": 2.0, + "e22": 2.0, + "e23": 2.0, + "e30": 2.0, + "e31": 2.0, + "e32": 2.0, + "e33": 2.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "0d7878dd226d4cfb81a991dc312309fc", + "m_Id": 0, + "m_DisplayName": "Underlay Dilate", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector2MaterialSlot", + "m_ObjectId": "0f7ffb6d2de4447f9736780cbcee8e07", + "m_Id": 4, + "m_DisplayName": "AnimSpeed", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "AnimSpeed", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0 + }, + "m_Labels": [ + "X", + "Y" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "0fac35636fca4474a6afaefc3c757775", + "m_Id": 1, + "m_DisplayName": "Alpha", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Alpha", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "105b1ed1aa714e41bbe1ef5472bdb11f", + "m_Group": { + "m_Id": "484b51c50485473b819c4f05087b32d7" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4923.99951171875, + "y": -4233.0, + "width": 158.99998474121095, + "height": 34.0 + } + }, + "m_Slots": [ + { + "m_Id": "8a08179f99d649d289b8053d5fa0ad22" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "49e7c3ad55ce458797f0e60c950cb965" + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.MultiplyNode", + "m_ObjectId": "109f638d1f9b49d4991d6d21a86d4eb7", + "m_Group": { + "m_Id": "42cadae0923e4969b50bbc3f78185934" + }, + "m_Name": "Multiply", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -5098.99951171875, + "y": -3182.0, + "width": 130.0, + "height": 118.0 + } + }, + "m_Slots": [ + { + "m_Id": "880bb02c6c6b49b18aa6ebc66dc566a0" + }, + { + "m_Id": "1b9cd8f5f4004e2eaf8afbaab803bc04" + }, + { + "m_Id": "b224a1cf80604103ad085c799995f3c2" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "10a99c07aad742349d258db16838c129", + "m_Id": 1, + "m_DisplayName": "Alpha", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Alpha", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Texture2DInputMaterialSlot", + "m_ObjectId": "1196ae398cc348349ab0c1a23fdab4bd", + "m_Id": 1, + "m_DisplayName": "Texture", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Texture", + "m_StageCapability": 3, + "m_BareResource": false, + "m_Texture": { + "m_SerializedTexture": "{\"texture\":{\"instanceID\":0}}", + "m_Guid": "" + }, + "m_DefaultType": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Texture2DMaterialSlot", + "m_ObjectId": "1356dc7cbdfa4199a6535d3bbf4cd536", + "m_Id": 0, + "m_DisplayName": "_MainTex", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_BareResource": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "14ad19bf20a140dd88d58452d7df688b", + "m_Id": 5, + "m_DisplayName": "Softness", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Softness", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 1.0, + "z": 1.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "150533bad8e2424aaa2c74e253af8592", + "m_Group": { + "m_Id": "42cadae0923e4969b50bbc3f78185934" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4955.0, + "y": -3487.0, + "width": 134.0, + "height": 34.0 + } + }, + "m_Slots": [ + { + "m_Id": "72fb5a0d7796446b9e2b929cb32facdc" + } + ], + "synonyms": [], + "m_Precision": 1, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "3e372195f4bd4845852a37839e5b602d" + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.SplitNode", + "m_ObjectId": "163beb4431c34f538340bc0af0991e6f", + "m_Group": { + "m_Id": "ecf16c34d46f4502ac601f0c38c7576b" + }, + "m_Name": "Split", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -3284.0, + "y": -3516.0, + "width": 119.99999237060547, + "height": 149.0 + } + }, + "m_Slots": [ + { + "m_Id": "4c334de01ecd429baa7652fc6002536b" + }, + { + "m_Id": "e2d28f29bbac4983a401574480b5ca28" + }, + { + "m_Id": "6a7af6143e114a538663e71f56731a21" + }, + { + "m_Id": "3e25be96bb3747738c238cf3a741d5df" + }, + { + "m_Id": "4907352322c644ebacdf2ca30f2994fd" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "19075add867e4757b9520d18fe8de1d0", + "m_Group": { + "m_Id": "42cadae0923e4969b50bbc3f78185934" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4292.0, + "y": -3213.000244140625, + "width": 124.0, + "height": 34.0 + } + }, + "m_Slots": [ + { + "m_Id": "4c28ee9109014fa086e5de7a3993341d" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "0580d4b7e3a049049569f4508643a724" + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicValueMaterialSlot", + "m_ObjectId": "1b9cd8f5f4004e2eaf8afbaab803bc04", + "m_Id": 1, + "m_DisplayName": "B", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 3, + "m_Value": { + "e00": 2.0, + "e01": 2.0, + "e02": 2.0, + "e03": 2.0, + "e10": 2.0, + "e11": 2.0, + "e12": 2.0, + "e13": 2.0, + "e20": 2.0, + "e21": 2.0, + "e22": 2.0, + "e23": 2.0, + "e30": 2.0, + "e31": 2.0, + "e32": 2.0, + "e33": 2.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Texture2DInputMaterialSlot", + "m_ObjectId": "1bdde3efd3b7464b8934c555be0f8a48", + "m_Id": 1, + "m_DisplayName": "Texture", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Texture", + "m_StageCapability": 3, + "m_BareResource": false, + "m_Texture": { + "m_SerializedTexture": "{\"texture\":{\"instanceID\":0}}", + "m_Guid": "" + }, + "m_DefaultType": 0 +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.Internal.Vector1ShaderProperty", + "m_ObjectId": "1be90d4f96a841748b0c95219b12ad27", + "m_Guid": { + "m_GuidSerialized": "4c91c146-43bb-4de8-948a-fbf8b1da10e1" + }, + "m_Name": "Bevel Offset", + "m_DefaultReferenceName": "Vector1_97690701", + "m_OverrideReferenceName": "_BevelOffset", + "m_GeneratePropertyBlock": true, + "m_Precision": 1, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": 0.0, + "m_FloatType": 1, + "m_RangeValues": { + "x": -0.5, + "y": 0.5 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "1c4df61c2fea404eb3b87b270d7c59bc", + "m_Group": { + "m_Id": "42cadae0923e4969b50bbc3f78185934" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4316.0, + "y": -3247.000244140625, + "width": 148.00001525878907, + "height": 34.0 + } + }, + "m_Slots": [ + { + "m_Id": "f864c900600e427ba7793f00c715e971" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "867a4ae13c0d4a028c71bc1063824c14" + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicValueMaterialSlot", + "m_ObjectId": "1d35fa1fb5004f96a65ace54fbe4f1ad", + "m_Id": 0, + "m_DisplayName": "A", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 3, + "m_Value": { + "e00": 0.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 0.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 0.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 0.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "1db37082bf844442804487b4944352de", + "m_Id": 4, + "m_DisplayName": "R", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "R", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Texture2DMaterialSlot", + "m_ObjectId": "1df58cfa4dad4c449d01ee1c5ea05f2e", + "m_Id": 0, + "m_DisplayName": "_MainTex", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_BareResource": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.UVNode", + "m_ObjectId": "1e12726617b24675958e942eb62e4b09", + "m_Group": { + "m_Id": "484b51c50485473b819c4f05087b32d7" + }, + "m_Name": "UV", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4772.0, + "y": -4404.0, + "width": 145.00001525878907, + "height": 130.0 + } + }, + "m_Slots": [ + { + "m_Id": "0848ba750e0341198cf0bbd413e0efe4" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_OutputChannel": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Texture2DInputMaterialSlot", + "m_ObjectId": "1f247658c7ba45fb93c41f51e21acb0d", + "m_Id": 1, + "m_DisplayName": "Texture", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Texture", + "m_StageCapability": 3, + "m_BareResource": false, + "m_Texture": { + "m_SerializedTexture": "{\"texture\":{\"instanceID\":0}}", + "m_Guid": "" + }, + "m_DefaultType": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "1f46181633594ae0a1fb2adb76b42981", + "m_Id": 5, + "m_DisplayName": "G", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "G", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "200245fc8bbe4826b209ab5f7ffe074c", + "m_Id": 3, + "m_DisplayName": "A", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.UVMaterialSlot", + "m_ObjectId": "204dacb5a95b424facf11cb6f65bd188", + "m_Id": 2, + "m_DisplayName": "UV", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "UV", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0 + }, + "m_Labels": [ + "X", + "Y" + ], + "m_Channel": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BooleanMaterialSlot", + "m_ObjectId": "215a82c127204988b751de7d3a39b955", + "m_Id": 6, + "m_DisplayName": "Outline", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Outline", + "m_StageCapability": 3, + "m_Value": false, + "m_DefaultValue": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.SamplerStateMaterialSlot", + "m_ObjectId": "215b30ae27784ec3a13360a9029af283", + "m_Id": 3, + "m_DisplayName": "Sampler", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Sampler", + "m_StageCapability": 3, + "m_BareResource": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Internal.BooleanShaderProperty", + "m_ObjectId": "21a7a380e66d42e780e2a2a1baa630d5", + "m_Guid": { + "m_GuidSerialized": "b2d0099f-e605-49f5-9959-e7cacae37aa3" + }, + "m_Name": "Bevel Type", + "m_DefaultReferenceName": "Boolean_21a7a380e66d42e780e2a2a1baa630d5", + "m_OverrideReferenceName": "_BevelType", + "m_GeneratePropertyBlock": true, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": false +} + +{ + "m_SGVersion": 3, + "m_Type": "UnityEditor.ShaderGraph.Internal.ColorShaderProperty", + "m_ObjectId": "22b7f3c2bb7b48c0a7fdeb50e33e7d5e", + "m_Guid": { + "m_GuidSerialized": "cd167d3a-7465-4d5a-86fc-0f22dc0ef908" + }, + "m_Name": "Outline Color 1", + "m_DefaultReferenceName": "Color_5550EB71", + "m_OverrideReferenceName": "_OutlineColor1", + "m_GeneratePropertyBlock": true, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": { + "r": 0.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "m_ColorMode": 1 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "232b1aa09e67479abae141d3c76d3c5b", + "m_Id": 0, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "256d41e89a204d22951450de1c38051d", + "m_Id": 0, + "m_DisplayName": "RGBA", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "RGBA", + "m_StageCapability": 2, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector3MaterialSlot", + "m_ObjectId": "26e48352a08441bfa694dcea54c06e36", + "m_Id": 5, + "m_DisplayName": "RGB", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "RGB", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [ + "X", + "Y", + "Z" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "281bcee4777040f8a31ee0e10344e98d", + "m_Id": 0, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 1.0, + "y": 1.0, + "z": 1.0, + "w": 1.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "285f6a9863d54ed2a8150727ad749456", + "m_Group": { + "m_Id": "98934a69591249d5b8b92b39045359a3" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4181.99951171875, + "y": -2415.0, + "width": 154.0, + "height": 34.0 + } + }, + "m_Slots": [ + { + "m_Id": "b42e6dbfbc864097af182cbff5c0c1fb" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "22b7f3c2bb7b48c0a7fdeb50e33e7d5e" + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.Rendering.HighDefinition.ShaderGraph.HDUnlitSubTarget", + "m_ObjectId": "29b1a6d4abc94131be838c0bc77892fc" +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.IsFrontFaceNode", + "m_ObjectId": "2a552a0b828f457c911aa19561e410ae", + "m_Group": { + "m_Id": "d258902c6ec74942afdb9ebf8c1d07f8" + }, + "m_Name": "Is Front Face", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4282.0, + "y": -3681.3330078125, + "width": 121.99999237060547, + "height": 77.33348846435547 + } + }, + "m_Slots": [ + { + "m_Id": "2ef1d888dc9d49e59d6a6950897ddc93" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.CustomFunctionNode", + "m_ObjectId": "2ac79705aa9e415dbb74ec215233fd1b", + "m_Group": { + "m_Id": "" + }, + "m_Name": "Composite (Custom Function)", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -3350.0, + "y": -3810.0, + "width": 213.0, + "height": 118.0 + } + }, + "m_Slots": [ + { + "m_Id": "a75f7ac601c446469802fe7754c1f279" + }, + { + "m_Id": "8c38a5d8327f456e9783740c05382619" + }, + { + "m_Id": "facc84930f544fd7a0205a6176b18ac0" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SourceType": 0, + "m_FunctionName": "Composite", + "m_FunctionSource": "96de908384869cd409c75efa351d5edf", + "m_FunctionBody": "Enter function body here..." +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "2b01ea3023e34c94af1754e4dcea8f2e", + "m_Id": 0, + "m_DisplayName": "Face Color", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BooleanMaterialSlot", + "m_ObjectId": "2bf5f2fdd2984599b7323d10cfb1d240", + "m_Id": 1, + "m_DisplayName": "Filter", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Filter", + "m_StageCapability": 3, + "m_Value": false, + "m_DefaultValue": false +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.Internal.Vector1ShaderProperty", + "m_ObjectId": "2c10b97b92c947ceb307a93759c0228b", + "m_Guid": { + "m_GuidSerialized": "6be0b8ff-a766-4c6b-a6e4-3a72758ac95f" + }, + "m_Name": "Bevel Amount", + "m_DefaultReferenceName": "Vector1_B01DD93E", + "m_OverrideReferenceName": "_BevelAmount", + "m_GeneratePropertyBlock": true, + "m_Precision": 1, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": 0.0, + "m_FloatType": 1, + "m_RangeValues": { + "x": 0.0, + "y": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "2c7a9460724b47daad8df1be144de7c6", + "m_Id": 3, + "m_DisplayName": "Transform", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Transform", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.Internal.Vector2ShaderProperty", + "m_ObjectId": "2d0a269511e34bd1ba9056d2c939dff2", + "m_Guid": { + "m_GuidSerialized": "edbe73dc-53ab-4bc1-9d64-ab36e0e05f03" + }, + "m_Name": "_FaceUVSpeed", + "m_DefaultReferenceName": "Vector2_3A8E0F13", + "m_OverrideReferenceName": "_FaceUVSpeed", + "m_GeneratePropertyBlock": true, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "2db15d90c2204143b225ec4ef08d0755", + "m_Group": { + "m_Id": "98934a69591249d5b8b92b39045359a3" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4387.00048828125, + "y": -2381.0, + "width": 163.0, + "height": 34.0 + } + }, + "m_Slots": [ + { + "m_Id": "def8e0b9d8384982bc5b4c32d877e458" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "46fbf3eeb0ea4470869cba7443249295" + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicValueMaterialSlot", + "m_ObjectId": "2e4eb1ef08bb44178c82e53872485e0f", + "m_Id": 0, + "m_DisplayName": "A", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 3, + "m_Value": { + "e00": 0.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 0.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 0.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 0.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BooleanMaterialSlot", + "m_ObjectId": "2ef1d888dc9d49e59d6a6950897ddc93", + "m_Id": 0, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 2, + "m_Value": true, + "m_DefaultValue": true +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.Rendering.HighDefinition.ShaderGraph.SystemData", + "m_ObjectId": "305e3be306674fcd8bb02273d27ee5b7", + "m_MaterialNeedsUpdateHash": 280370, + "m_SurfaceType": 1, + "m_RenderingPass": 4, + "m_BlendMode": 0, + "m_ZTest": 4, + "m_ZWrite": false, + "m_TransparentCullMode": 2, + "m_OpaqueCullMode": 2, + "m_SortPriority": 0, + "m_AlphaTest": true, + "m_TransparentDepthPrepass": false, + "m_TransparentDepthPostpass": false, + "m_SupportLodCrossFade": false, + "m_DoubleSidedMode": 0, + "m_DOTSInstancing": false, + "m_Version": 0, + "m_FirstTimeMigrationExecuted": true, + "inspectorFoldoutMask": 9 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "30ca940fe2794c949f2a1d4d2caaa446", + "m_Id": 2, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.SampleTexture2DNode", + "m_ObjectId": "319916a5921343f7b7eef0e50dc93def", + "m_Group": { + "m_Id": "42cadae0923e4969b50bbc3f78185934" + }, + "m_Name": "Sample Texture 2D", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4791.0, + "y": -3245.0, + "width": 183.99998474121095, + "height": 253.0 + } + }, + "m_Slots": [ + { + "m_Id": "d219977210094c0082c517d8dc00c8bb" + }, + { + "m_Id": "f48f04ad45d046a8b88e71731ed506e7" + }, + { + "m_Id": "e6e80c6b0db545cda26b079a9a78fbb3" + }, + { + "m_Id": "c6bdb985bc16435fa72f5a3c81bb633c" + }, + { + "m_Id": "d1a17e42e7a04dc38984e3c01149445b" + }, + { + "m_Id": "fb15d0ba56d54a6192f11e107aeb5fa8" + }, + { + "m_Id": "c35312edaa2344788b1964ee2f63a236" + }, + { + "m_Id": "c88fcbaeea954a5f9c68c339fa8b604d" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_TextureType": 0, + "m_NormalMapSpace": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "34a67e0fef884f9399e674d9eeaf720c", + "m_Id": 6, + "m_DisplayName": "Color3", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Color3", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "34a72a5ebb04402384a4fd3748111a37", + "m_Id": 0, + "m_DisplayName": "Alpha Clip Threshold", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "AlphaClipThreshold", + "m_StageCapability": 2, + "m_Value": 0.0010000000474974514, + "m_DefaultValue": 0.5, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Texture2DMaterialSlot", + "m_ObjectId": "3535ae87c6dd4769b52b20d9eca61069", + "m_Id": 0, + "m_DisplayName": "_MainTex", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_BareResource": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.SamplerStateMaterialSlot", + "m_ObjectId": "35cbea6373dd4e4f8d0fea36e8add392", + "m_Id": 3, + "m_DisplayName": "Sampler", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Sampler", + "m_StageCapability": 3, + "m_BareResource": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicValueMaterialSlot", + "m_ObjectId": "36a0c473c4c04c3a930dd38f3920d410", + "m_Id": 1, + "m_DisplayName": "B", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 3, + "m_Value": { + "e00": 2.0, + "e01": 2.0, + "e02": 2.0, + "e03": 2.0, + "e10": 2.0, + "e11": 2.0, + "e12": 2.0, + "e13": 2.0, + "e20": 2.0, + "e21": 2.0, + "e22": 2.0, + "e23": 2.0, + "e30": 2.0, + "e31": 2.0, + "e32": 2.0, + "e33": 2.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.UVNode", + "m_ObjectId": "36f1b4d96f2941c39e5cd95d9c1d2ce6", + "m_Group": { + "m_Id": "d0a791a544614667962a9a9a9ce0c68a" + }, + "m_Name": "UV", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -6008.99951171875, + "y": -3341.0, + "width": 144.99998474121095, + "height": 130.0 + } + }, + "m_Slots": [ + { + "m_Id": "65b3dc13b2b6484283ffe5abfe87a06a" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_OutputChannel": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicValueMaterialSlot", + "m_ObjectId": "373f1de8db6c429c9d46c781f741d7a4", + "m_Id": 1, + "m_DisplayName": "B", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 3, + "m_Value": { + "e00": 2.0, + "e01": 2.0, + "e02": 2.0, + "e03": 2.0, + "e10": 2.0, + "e11": 2.0, + "e12": 2.0, + "e13": 2.0, + "e20": 2.0, + "e21": 2.0, + "e22": 2.0, + "e23": 2.0, + "e30": 2.0, + "e31": 2.0, + "e32": 2.0, + "e33": 2.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "3802c81c3be24823aa1d7c9997a33c29", + "m_Id": 2, + "m_DisplayName": "RGBA", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "RGBA", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Texture2DInputMaterialSlot", + "m_ObjectId": "3915c1927ffe49f8967304321cfbe497", + "m_Id": 4, + "m_DisplayName": "Atlas", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Atlas", + "m_StageCapability": 3, + "m_BareResource": true, + "m_Texture": { + "m_SerializedTexture": "{\"texture\":{\"instanceID\":0}}", + "m_Guid": "" + }, + "m_DefaultType": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "39a382d661e2484da71f04c43f48e55f", + "m_Id": 3, + "m_DisplayName": "A", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.VertexColorNode", + "m_ObjectId": "39f2f84f30304d859fb07569e2695f60", + "m_Group": { + "m_Id": "ecf16c34d46f4502ac601f0c38c7576b" + }, + "m_Name": "Vertex Color", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -3423.000244140625, + "y": -3516.0, + "width": 116.0, + "height": 94.0 + } + }, + "m_Slots": [ + { + "m_Id": "4b2d9ea03bf64fa19dcae1511d2581da" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 2, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BlockNode", + "m_ObjectId": "3c50439118b2496f9e390021b0964606", + "m_Group": { + "m_Id": "" + }, + "m_Name": "SurfaceDescription.AlphaClipThreshold", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -3028.0, + "y": -3054.0, + "width": 200.0, + "height": 40.66650390625 + } + }, + "m_Slots": [ + { + "m_Id": "34a72a5ebb04402384a4fd3748111a37" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SerializedDescriptor": "SurfaceDescription.AlphaClipThreshold" +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Texture2DMaterialSlot", + "m_ObjectId": "3d04f5ba6e7b40d281f22eb424145acd", + "m_Id": 0, + "m_DisplayName": "Face Texture", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_BareResource": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "3db1608e927e4102a3c3a88e9fcab39a", + "m_Id": 3, + "m_DisplayName": "Transform", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Transform", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "3dccd64e7f324bc1a75c1479d7a67c51", + "m_Id": 0, + "m_DisplayName": "In", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "In", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.CombineNode", + "m_ObjectId": "3e231021af7b47ba97f2871e7f25d0fe", + "m_Group": { + "m_Id": "ecf16c34d46f4502ac601f0c38c7576b" + }, + "m_Name": "Combine", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -2803.000244140625, + "y": -3520.0, + "width": 140.0, + "height": 166.0 + } + }, + "m_Slots": [ + { + "m_Id": "6ccaced3889e4503a9414d808ec33981" + }, + { + "m_Id": "7f3d71a6c96847c099da45f95aafbecb" + }, + { + "m_Id": "d8edec16956c4f15b7d51d6ec10753f4" + }, + { + "m_Id": "39a382d661e2484da71f04c43f48e55f" + }, + { + "m_Id": "8764669016f6442f8152593c18a649d7" + }, + { + "m_Id": "26e48352a08441bfa694dcea54c06e36" + }, + { + "m_Id": "3e94a0d106064bdb864c960512ef4026" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "3e25be96bb3747738c238cf3a741d5df", + "m_Id": 3, + "m_DisplayName": "B", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Internal.Texture2DShaderProperty", + "m_ObjectId": "3e372195f4bd4845852a37839e5b602d", + "m_Guid": { + "m_GuidSerialized": "60abd046-2a1a-48cd-a0af-2f702f7f53ab" + }, + "m_Name": "_MainTex", + "m_DefaultReferenceName": "Texture2D_90CBF488", + "m_OverrideReferenceName": "_MainTex", + "m_GeneratePropertyBlock": true, + "m_Precision": 1, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": { + "m_SerializedTexture": "{\"texture\":{\"fileID\":28684132378477856,\"guid\":\"8f586378b4e144a9851e7b34d9b748ee\",\"type\":2}}", + "m_Guid": "" + }, + "m_Modifiable": true, + "m_DefaultType": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector2MaterialSlot", + "m_ObjectId": "3e94a0d106064bdb864c960512ef4026", + "m_Id": 6, + "m_DisplayName": "RG", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "RG", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0 + }, + "m_Labels": [ + "X", + "Y" + ] +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.Internal.Vector1ShaderProperty", + "m_ObjectId": "3ec4797e381747829ef4712c85fcf7a1", + "m_Guid": { + "m_GuidSerialized": "020d65cc-50a8-4b8a-a624-90d7b489f549" + }, + "m_Name": "Specular Power", + "m_DefaultReferenceName": "Vector1_3ec4797e381747829ef4712c85fcf7a1", + "m_OverrideReferenceName": "_SpecularPower", + "m_GeneratePropertyBlock": true, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": 0.0, + "m_FloatType": 1, + "m_RangeValues": { + "x": 0.0, + "y": 4.0 + } +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.Internal.Vector2ShaderProperty", + "m_ObjectId": "3fdf4b7bc5d4426492dcc057603ef4a6", + "m_Guid": { + "m_GuidSerialized": "675d2567-3fca-4da6-9462-dfa4924950f1" + }, + "m_Name": "_OutlineUVSpeed", + "m_DefaultReferenceName": "Vector2_D66D89E6", + "m_OverrideReferenceName": "_OutlineUVSpeed", + "m_GeneratePropertyBlock": true, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicValueMaterialSlot", + "m_ObjectId": "400d0b6c95dd4540ad3da3e8cb7e50b2", + "m_Id": 2, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "e00": 0.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 0.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 0.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 0.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicValueMaterialSlot", + "m_ObjectId": "41986ac6400d46709d0ef043a67f6b34", + "m_Id": 2, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "e00": 0.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 0.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 0.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 0.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "41b9b79b3859472882bcea393703eec0", + "m_Id": 0, + "m_DisplayName": "RGBA", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "RGBA", + "m_StageCapability": 2, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.Internal.Vector1ShaderProperty", + "m_ObjectId": "424dbeeb009344efa29c304c4979e3d6", + "m_Guid": { + "m_GuidSerialized": "314c37de-c6f2-4463-866d-8588f6fc119e" + }, + "m_Name": "Diffuse Shadow", + "m_DefaultReferenceName": "Vector1_424dbeeb009344efa29c304c4979e3d6", + "m_OverrideReferenceName": "_Diffuse", + "m_GeneratePropertyBlock": true, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": 0.30000001192092898, + "m_FloatType": 1, + "m_RangeValues": { + "x": 0.0, + "y": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "42a586e4f6ec40eeaba891b7fd133864", + "m_Group": { + "m_Id": "484b51c50485473b819c4f05087b32d7" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4934.0, + "y": -4442.99951171875, + "width": 133.99998474121095, + "height": 33.999996185302737 + } + }, + "m_Slots": [ + { + "m_Id": "da7a06d393a44089842070d51d2aa0a6" + } + ], + "synonyms": [], + "m_Precision": 1, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "3e372195f4bd4845852a37839e5b602d" + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.GroupData", + "m_ObjectId": "42cadae0923e4969b50bbc3f78185934", + "m_Title": "Face + 3 Outlines + Underlay", + "m_Position": { + "x": -5468.0, + "y": -3558.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "4328cdbf78b94c038fd614c59bfe1cac", + "m_Id": 0, + "m_DisplayName": "RGBA", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "RGBA", + "m_StageCapability": 2, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.CustomFunctionNode", + "m_ObjectId": "44317f2e371447e2a8d894f8a021a235", + "m_Group": { + "m_Id": "484b51c50485473b819c4f05087b32d7" + }, + "m_Name": "Layer1 (Custom Function)", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4004.999755859375, + "y": -4173.0, + "width": 191.0, + "height": 118.0 + } + }, + "m_Slots": [ + { + "m_Id": "10a99c07aad742349d258db16838c129" + }, + { + "m_Id": "b85d677872b44421bf5536f42ba0267c" + }, + { + "m_Id": "75aba700d74d4b2687bf3166cf1da3e2" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SourceType": 0, + "m_FunctionName": "Layer1", + "m_FunctionSource": "96de908384869cd409c75efa351d5edf", + "m_FunctionBody": "Enter function body here..." +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "44806230fa384c1e95f9c5918a14f056", + "m_Id": 7, + "m_DisplayName": "A", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "4488af8ff6a7421298a7e827f567263b", + "m_Group": { + "m_Id": "484b51c50485473b819c4f05087b32d7" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4226.0, + "y": -4109.0, + "width": 158.0, + "height": 34.0 + } + }, + "m_Slots": [ + { + "m_Id": "66f69ef16eac4eb48357bde804cf3c39" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "8cf8aae64c1d443f9303126886b40f17" + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.ColorRGBMaterialSlot", + "m_ObjectId": "4590bfa2a0664b65b6f073bae33a071f", + "m_Id": 0, + "m_DisplayName": "Emission", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Emission", + "m_StageCapability": 2, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [], + "m_ColorMode": 1, + "m_DefaultColor": { + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.UVNode", + "m_ObjectId": "4648b46ad29a4008a80de4f8a5a5b813", + "m_Group": { + "m_Id": "98934a69591249d5b8b92b39045359a3" + }, + "m_Name": "UV", + "m_DrawState": { + "m_Expanded": false, + "m_Position": { + "serializedVersion": "2", + "x": -4615.00048828125, + "y": -2415.000244140625, + "width": 145.0, + "height": 130.00001525878907 + } + }, + "m_Slots": [ + { + "m_Id": "b2baf44eae52473cb6cda7b1debece01" + } + ], + "synonyms": [], + "m_Precision": 1, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_OutputChannel": 1 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Internal.Texture2DShaderProperty", + "m_ObjectId": "46fbf3eeb0ea4470869cba7443249295", + "m_Guid": { + "m_GuidSerialized": "be87c5a3-e361-4b95-89c8-911c39a51c0d" + }, + "m_Name": "Outline Texture", + "m_DefaultReferenceName": "Texture2D_A0B54237", + "m_OverrideReferenceName": "_OutlineTex", + "m_GeneratePropertyBlock": true, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": { + "m_SerializedTexture": "{\"texture\":{\"instanceID\":0}}", + "m_Guid": "" + }, + "m_Modifiable": true, + "m_DefaultType": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "47d020251e9841a5b1f0fd64396026a1", + "m_Id": 1, + "m_DisplayName": "B", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 3, + "m_Value": { + "x": 1.0, + "y": 1.0, + "z": 1.0, + "w": 1.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BlockNode", + "m_ObjectId": "48390d02257d41bf98eace1deaa4c539", + "m_Group": { + "m_Id": "" + }, + "m_Name": "VertexDescription.Position", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": 0.0, + "y": 0.0, + "width": 0.0, + "height": 0.0 + } + }, + "m_Slots": [ + { + "m_Id": "8036d0e6090b456e9b4ea87227868236" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SerializedDescriptor": "VertexDescription.Position" +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.GroupData", + "m_ObjectId": "484b51c50485473b819c4f05087b32d7", + "m_Title": "Underlay", + "m_Position": { + "x": -5253.0, + "y": -4542.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "4907352322c644ebacdf2ca30f2994fd", + "m_Id": 4, + "m_DisplayName": "A", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.Internal.Vector2ShaderProperty", + "m_ObjectId": "49e7c3ad55ce458797f0e60c950cb965", + "m_Guid": { + "m_GuidSerialized": "31b55db9-0da1-4ec4-af2b-d83747ed5bc4" + }, + "m_Name": "Underlay Offset", + "m_DefaultReferenceName": "Vector2_CE9DEDB3", + "m_OverrideReferenceName": "_UnderlayOffset", + "m_GeneratePropertyBlock": true, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "4a66dcbe712a4d40bd8f355b834594b5", + "m_Id": 6, + "m_DisplayName": "B", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.CombineNode", + "m_ObjectId": "4abff6ff92fa4a05b203f10580988335", + "m_Group": { + "m_Id": "42cadae0923e4969b50bbc3f78185934" + }, + "m_Name": "Combine", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4308.0, + "y": -3498.000244140625, + "width": 140.0, + "height": 166.00001525878907 + } + }, + "m_Slots": [ + { + "m_Id": "b015d1b7e4134c59baf6851e7649802c" + }, + { + "m_Id": "d9dc4839ee2847999110bdb234d6041a" + }, + { + "m_Id": "91d6a9a5fbc04ea49075cb51835e7264" + }, + { + "m_Id": "f42ad06b3c6a45d3ab33de904c063412" + }, + { + "m_Id": "ed6c215a65584deeaefad1d2c7743044" + }, + { + "m_Id": "edbee7a8952b46529ac5ad0365775774" + }, + { + "m_Id": "70337a74f6ad4b7bb6befc825219bab1" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "4b2d9ea03bf64fa19dcae1511d2581da", + "m_Id": 0, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 1.0, + "y": 1.0, + "z": 1.0, + "w": 1.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "4bda5c294e1949138d033640e1d385b4", + "m_Id": 1, + "m_DisplayName": "B", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 3, + "m_Value": { + "x": 1.0, + "y": 1.0, + "z": 1.0, + "w": 1.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "4c28ee9109014fa086e5de7a3993341d", + "m_Id": 0, + "m_DisplayName": "Softness", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "4c334de01ecd429baa7652fc6002536b", + "m_Id": 0, + "m_DisplayName": "In", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "In", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "4d1cb1a475df49f9a148195a65f5453a", + "m_Id": 0, + "m_DisplayName": "A", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 3, + "m_Value": { + "x": 1.0, + "y": 1.0, + "z": 1.0, + "w": 1.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "4d9ce48719d143748f9f8e22da6f9ddc", + "m_Id": 5, + "m_DisplayName": "TextureWidth", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "TextureWidth", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "4e64dac49ddc47c3b5b1e27b17a08304", + "m_Id": 2, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Texture2DInputMaterialSlot", + "m_ObjectId": "4eb3c00a1ca44e10be833b7ca61ff059", + "m_Id": 1, + "m_DisplayName": "Texture", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Texture", + "m_StageCapability": 3, + "m_BareResource": false, + "m_Texture": { + "m_SerializedTexture": "{\"texture\":{\"fileID\":-2362172177983852347,\"guid\":\"dda5bcb0d1e9515498f6e4e038bbefe6\",\"type\":2}}", + "m_Guid": "" + }, + "m_DefaultType": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "4f194ff591484e908fc2bcdacbcf2570", + "m_Group": { + "m_Id": "013228b0fdf1424097798f0973a9a4fb" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4303.00048828125, + "y": -2771.0, + "width": 134.0, + "height": 34.0 + } + }, + "m_Slots": [ + { + "m_Id": "2b01ea3023e34c94af1754e4dcea8f2e" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "dc75c4e3a1bc4bb0a128086c2b0679a5" + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Texture2DInputMaterialSlot", + "m_ObjectId": "509e6f38505b4b0695b263706a55028f", + "m_Id": 1, + "m_DisplayName": "Texture", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Texture", + "m_StageCapability": 3, + "m_BareResource": false, + "m_Texture": { + "m_SerializedTexture": "{\"texture\":{\"fileID\":-2362172177983852347,\"guid\":\"dda5bcb0d1e9515498f6e4e038bbefe6\",\"type\":2}}", + "m_Guid": "" + }, + "m_DefaultType": 0 +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.CustomFunctionNode", + "m_ObjectId": "51378bae98a94c309785d14cd5cbb453", + "m_Group": { + "m_Id": "d258902c6ec74942afdb9ebf8c1d07f8" + }, + "m_Name": "GetSurfaceNormal (Custom Function)", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4067.333251953125, + "y": -3881.99951171875, + "width": 263.9999694824219, + "height": 189.99998474121095 + } + }, + "m_Slots": [ + { + "m_Id": "5b0077c23eae443887872f84227deccc" + }, + { + "m_Id": "3915c1927ffe49f8967304321cfbe497" + }, + { + "m_Id": "4d9ce48719d143748f9f8e22da6f9ddc" + }, + { + "m_Id": "ebd6d75abcb84108bcadbfe7ee5f6244" + }, + { + "m_Id": "ef9738ec7e894772a14e9dce441c16c6" + }, + { + "m_Id": "9eeec1a9713045af8845cea263d5ea48" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SourceType": 0, + "m_FunctionName": "GetSurfaceNormal", + "m_FunctionSource": "96de908384869cd409c75efa351d5edf", + "m_FunctionBody": "Enter function body here..." +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.SamplerStateMaterialSlot", + "m_ObjectId": "51f76f8a53ad43a4ad028426548ce9ba", + "m_Id": 3, + "m_DisplayName": "Sampler", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Sampler", + "m_StageCapability": 3, + "m_BareResource": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "52798bdb86f6400e86489a7a368e9f8b", + "m_Group": { + "m_Id": "d0a791a544614667962a9a9a9ce0c68a" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -6154.99951171875, + "y": -3169.0, + "width": 134.0, + "height": 34.0 + } + }, + "m_Slots": [ + { + "m_Id": "1df58cfa4dad4c449d01ee1c5ea05f2e" + } + ], + "synonyms": [], + "m_Precision": 1, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "3e372195f4bd4845852a37839e5b602d" + } +} + +{ + "m_SGVersion": 3, + "m_Type": "UnityEditor.ShaderGraph.Internal.ColorShaderProperty", + "m_ObjectId": "53073e5ea924459fa6681a4943e9f947", + "m_Guid": { + "m_GuidSerialized": "5fdac24e-2d58-4471-80ce-79c3ab9a2564" + }, + "m_Name": "Outline Color 2", + "m_DefaultReferenceName": "Color_DBAB5AEC", + "m_OverrideReferenceName": "_OutlineColor2", + "m_GeneratePropertyBlock": true, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": { + "r": 0.009433984756469727, + "g": 0.02534518577158451, + "b": 1.0, + "a": 1.0 + }, + "m_ColorMode": 1 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "54d7a93ffec5490aa4591da23a21b693", + "m_Id": 1, + "m_DisplayName": "G", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "G", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector2MaterialSlot", + "m_ObjectId": "55ffa45ec3654d5e88089fb40d2b0465", + "m_Id": 4, + "m_DisplayName": "AnimSpeed", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "AnimSpeed", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0 + }, + "m_Labels": [ + "X", + "Y" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.MultiplyNode", + "m_ObjectId": "56c25395796e4d2fbe5c892d428d1620", + "m_Group": { + "m_Id": "42cadae0923e4969b50bbc3f78185934" + }, + "m_Name": "Multiply", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -5102.99951171875, + "y": -3427.0, + "width": 130.0, + "height": 118.0 + } + }, + "m_Slots": [ + { + "m_Id": "9eb8137a6c2e41bbafdc8b0732dd47a3" + }, + { + "m_Id": "36a0c473c4c04c3a930dd38f3920d410" + }, + { + "m_Id": "068ae649e00b40e198ec5a30ad741fab" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.UVMaterialSlot", + "m_ObjectId": "57abc172afd449e2a4d567f93432507b", + "m_Id": 2, + "m_DisplayName": "UV", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "UV", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0 + }, + "m_Labels": [ + "X", + "Y" + ], + "m_Channel": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "582d6e289dbe4fdca7cf0307273eaa2f", + "m_Id": 0, + "m_DisplayName": "RGBA", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "RGBA", + "m_StageCapability": 2, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.MultiplyNode", + "m_ObjectId": "59bd90a849624124bae6464ee3669aa6", + "m_Group": { + "m_Id": "98934a69591249d5b8b92b39045359a3" + }, + "m_Name": "Multiply", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4008.999755859375, + "y": -2394.0, + "width": 130.0, + "height": 118.0 + } + }, + "m_Slots": [ + { + "m_Id": "2e4eb1ef08bb44178c82e53872485e0f" + }, + { + "m_Id": "8695190a5e614f2d90081871a8a06fc2" + }, + { + "m_Id": "81bdb47901ef48e5a588c6724b1b0142" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector3MaterialSlot", + "m_ObjectId": "5b0077c23eae443887872f84227deccc", + "m_Id": 0, + "m_DisplayName": "Normal", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Normal", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [ + "X", + "Y", + "Z" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "5b3ff4ee364f4d7a923b530ad60d8762", + "m_Id": 0, + "m_DisplayName": "Width", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Width", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.Internal.Vector1ShaderProperty", + "m_ObjectId": "5bd258837c514ff7ab0bf7027e762c18", + "m_Guid": { + "m_GuidSerialized": "2d8f3ee9-1307-4b58-a60d-526e86b07109" + }, + "m_Name": "Bevel Roundness", + "m_DefaultReferenceName": "Vector1_AB6A015F", + "m_OverrideReferenceName": "_BevelRoundness", + "m_GeneratePropertyBlock": true, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": 0.0, + "m_FloatType": 1, + "m_RangeValues": { + "x": 0.0, + "y": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "5da82bf481f8489ebd05e997f617f51b", + "m_Id": 4, + "m_DisplayName": "Isoperimeter", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Isoperimeter", + "m_StageCapability": 3, + "m_Value": 4.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "5e42524569844befad16fda5a94eb9cb", + "m_Id": 0, + "m_DisplayName": "R", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "R", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.Internal.Vector1ShaderProperty", + "m_ObjectId": "5fbe253f3e444f2aa8ac717f9c856619", + "m_Guid": { + "m_GuidSerialized": "0a61c93f-6430-4aa6-af07-79bc3b411ccd" + }, + "m_Name": "Bevel Width", + "m_DefaultReferenceName": "Vector1_B50BBFCC", + "m_OverrideReferenceName": "_BevelWidth", + "m_GeneratePropertyBlock": true, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": 0.5, + "m_FloatType": 1, + "m_RangeValues": { + "x": 0.0, + "y": 0.5 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "61133d79a89048c195f54939b2a1d30a", + "m_Id": 2, + "m_DisplayName": "Alpha", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Alpha", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "61a6ac5f29344d109411f26850ab0a96", + "m_Id": 6, + "m_DisplayName": "B", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.Rendering.HighDefinition.ShaderGraph.HDLitData", + "m_ObjectId": "6238ae56182d404f8563cb88cb801549", + "m_RayTracing": false, + "m_MaterialType": 0, + "m_RefractionModel": 0, + "m_SSSTransmission": true, + "m_EnergyConservingSpecular": true, + "m_ClearCoat": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "6271438664e74b3fbf723bd6a1f50f8b", + "m_Id": 6, + "m_DisplayName": "B", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "62bc551cea604e88b7858cc37d96a98a", + "m_Id": 2, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.Internal.Vector2ShaderProperty", + "m_ObjectId": "636180f6e0504f2baaa5cc086980cb47", + "m_Guid": { + "m_GuidSerialized": "c1223e37-093d-4d5a-b2b0-cd9cc3e4f88e" + }, + "m_Name": "Outline Offset 1", + "m_DefaultReferenceName": "Vector2_636180f6e0504f2baaa5cc086980cb47", + "m_OverrideReferenceName": "_OutlineOffset1", + "m_GeneratePropertyBlock": true, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "63c7cd57fc3c45a9a97b514fdae32693", + "m_Group": { + "m_Id": "42cadae0923e4969b50bbc3f78185934" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -5266.99951171875, + "y": -3387.0, + "width": 156.99998474121095, + "height": 34.0 + } + }, + "m_Slots": [ + { + "m_Id": "c422a9a9ff824176aad2241f58c44d0b" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "636180f6e0504f2baaa5cc086980cb47" + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "641eda269d7b4da9acb65f8d50035ea9", + "m_Id": 0, + "m_DisplayName": "SSR", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "SSR", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "65b3dc13b2b6484283ffe5abfe87a06a", + "m_Id": 0, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.SampleTexture2DNode", + "m_ObjectId": "65c8e64a7535466e933eed08a2f77532", + "m_Group": { + "m_Id": "42cadae0923e4969b50bbc3f78185934" + }, + "m_Name": "Sample Texture 2D", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4791.0, + "y": -3499.0, + "width": 183.99998474121095, + "height": 253.0 + } + }, + "m_Slots": [ + { + "m_Id": "256d41e89a204d22951450de1c38051d" + }, + { + "m_Id": "0a67ca5280214bd794dc0ad66b5710a9" + }, + { + "m_Id": "ebbd94a7102a4457a48ac492de3bff14" + }, + { + "m_Id": "6271438664e74b3fbf723bd6a1f50f8b" + }, + { + "m_Id": "c9b722d107ce4cd6a748c883472b9b0f" + }, + { + "m_Id": "74cf69e61bef44589521f1bf2bf3c59a" + }, + { + "m_Id": "6e532f83d1c44e839bcfc5845d3b01d6" + }, + { + "m_Id": "cb5e9f9567e84f8fa5463efc0e256e19" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_TextureType": 0, + "m_NormalMapSpace": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "66f69ef16eac4eb48357bde804cf3c39", + "m_Id": 0, + "m_DisplayName": "_UnderlayColor", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "67a519f507384ff1861df5d8d5b486be", + "m_Group": { + "m_Id": "d258902c6ec74942afdb9ebf8c1d07f8" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4278.0, + "y": -3939.99951171875, + "width": 135.3330078125, + "height": 33.999996185302737 + } + }, + "m_Slots": [ + { + "m_Id": "c3e6d7c20c184bf39fd8822130e693e7" + } + ], + "synonyms": [], + "m_Precision": 1, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "3e372195f4bd4845852a37839e5b602d" + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.Rendering.HighDefinition.ShaderGraph.HDLitSubTarget", + "m_ObjectId": "67bc2306558f4f2fa807637aaebaeab4" +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "68ec7c31365549d6a8ce883edfc02de2", + "m_Id": 4, + "m_DisplayName": "Color1", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Color1", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "6a7af6143e114a538663e71f56731a21", + "m_Id": 2, + "m_DisplayName": "G", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "G", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.MultiplyNode", + "m_ObjectId": "6b2f65c1463f4f7bad16c54a95d2fe75", + "m_Group": { + "m_Id": "42cadae0923e4969b50bbc3f78185934" + }, + "m_Name": "Multiply", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -5101.0, + "y": -3301.0, + "width": 130.0, + "height": 118.0 + } + }, + "m_Slots": [ + { + "m_Id": "1d35fa1fb5004f96a65ace54fbe4f1ad" + }, + { + "m_Id": "fa6de3be9f5b4411b5081b49e645f424" + }, + { + "m_Id": "400d0b6c95dd4540ad3da3e8cb7e50b2" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "6ccaced3889e4503a9414d808ec33981", + "m_Id": 0, + "m_DisplayName": "R", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "R", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "6dfc1177dd0541a7a780fbf911ad1956", + "m_Id": 0, + "m_DisplayName": "_OutlineTex_ST", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "6e13f3cd573c467a94379f45d96cb690", + "m_Id": 2, + "m_DisplayName": "SSR", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "SSR", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.UVMaterialSlot", + "m_ObjectId": "6e532f83d1c44e839bcfc5845d3b01d6", + "m_Id": 2, + "m_DisplayName": "UV", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "UV", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0 + }, + "m_Labels": [], + "m_Channel": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BlockNode", + "m_ObjectId": "6e8946a245e842b38231d4a241bfb3ef", + "m_Group": { + "m_Id": "" + }, + "m_Name": "SurfaceDescription.BaseColor", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -3026.0, + "y": -3110.0, + "width": 200.0, + "height": 40.66650390625 + } + }, + "m_Slots": [ + { + "m_Id": "ef0b93f78372439696f50711eaf57d90" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SerializedDescriptor": "SurfaceDescription.BaseColor" +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "6fbdcc5a972b4fa883dc5f21e525a376", + "m_Id": 0, + "m_DisplayName": "A", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 3, + "m_Value": { + "x": 1.0, + "y": 1.0, + "z": 1.0, + "w": 1.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector2MaterialSlot", + "m_ObjectId": "7027aaab25924266a063a05df0aa39b3", + "m_Id": 0, + "m_DisplayName": "UV_1", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "UV_1", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector2MaterialSlot", + "m_ObjectId": "70337a74f6ad4b7bb6befc825219bab1", + "m_Id": 6, + "m_DisplayName": "RG", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "RG", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "712da461f71a454db59d349f752d41ee", + "m_Id": 2, + "m_DisplayName": "Height", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Height", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "71dd947935b64ce38f0d25406dde447b", + "m_Id": 5, + "m_DisplayName": "G", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "G", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "724e17584e97443e9e285dfa7253c8e3", + "m_Id": 0, + "m_DisplayName": "Alpha", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Alpha", + "m_StageCapability": 2, + "m_Value": 0.15000000596046449, + "m_DefaultValue": 1.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Texture2DMaterialSlot", + "m_ObjectId": "72fb5a0d7796446b9e2b929cb32facdc", + "m_Id": 0, + "m_DisplayName": "_MainTex", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_BareResource": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.UVNode", + "m_ObjectId": "7444469eb9884253819add9ef96baa25", + "m_Group": { + "m_Id": "d258902c6ec74942afdb9ebf8c1d07f8" + }, + "m_Name": "UV", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4298.0, + "y": -3809.99951171875, + "width": 144.66648864746095, + "height": 129.33323669433595 + } + }, + "m_Slots": [ + { + "m_Id": "03182b3263304258b265266325c21f65" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_OutputChannel": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "748c31bbcecc4b30bec2e42c0612175b", + "m_Id": 0, + "m_DisplayName": "A", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 3, + "m_Value": { + "x": 1.0, + "y": 1.0, + "z": 1.0, + "w": 1.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.Internal.Vector2ShaderProperty", + "m_ObjectId": "74b41464cbed4e9e8e23af5ab9be40cf", + "m_Guid": { + "m_GuidSerialized": "41afbdcb-f3ae-4340-8973-1c1998c992a2" + }, + "m_Name": "Outline Offset 2", + "m_DefaultReferenceName": "", + "m_OverrideReferenceName": "_OutlineOffset2", + "m_GeneratePropertyBlock": true, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Texture2DInputMaterialSlot", + "m_ObjectId": "74cf69e61bef44589521f1bf2bf3c59a", + "m_Id": 1, + "m_DisplayName": "Texture", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Texture", + "m_StageCapability": 3, + "m_BareResource": false, + "m_Texture": { + "m_SerializedTexture": "{\"texture\":{\"instanceID\":0}}", + "m_Guid": "" + }, + "m_DefaultType": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector2MaterialSlot", + "m_ObjectId": "757174b6f25040fdbb20355a21752222", + "m_Id": 0, + "m_DisplayName": "Outline Offset 2", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "75aba700d74d4b2687bf3166cf1da3e2", + "m_Id": 2, + "m_DisplayName": "RGBA", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "RGBA", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector2MaterialSlot", + "m_ObjectId": "75c5657544c648058b20cea090f48dbf", + "m_Id": 0, + "m_DisplayName": "_OutlineUVSpeed", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0 + }, + "m_Labels": [ + "X", + "Y" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "767769f736d5478cba5f10a415e28e7f", + "m_Id": 5, + "m_DisplayName": "G", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "G", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicValueMaterialSlot", + "m_ObjectId": "773b90134e894e429203c0c83e80b9de", + "m_Id": 2, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "e00": 0.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 0.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 0.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 0.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "77e28f3e930b4c249145630ec961af95", + "m_Id": 0, + "m_DisplayName": "A", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.Rendering.HighDefinition.ShaderGraph.HDUnlitData", + "m_ObjectId": "77ebd01f5b3149ad810a5acbffc85921", + "m_EnableShadowMatte": false, + "m_DistortionOnly": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BooleanMaterialSlot", + "m_ObjectId": "79147f6986644769b58d9ed64fe771e1", + "m_Id": 0, + "m_DisplayName": "OutlineMode", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": false, + "m_DefaultValue": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.MultiplyNode", + "m_ObjectId": "7984fd094e1147bdabb4e26fbd3d31c8", + "m_Group": { + "m_Id": "ecf16c34d46f4502ac601f0c38c7576b" + }, + "m_Name": "Multiply", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -3113.000244140625, + "y": -3468.0, + "width": 130.0, + "height": 118.0 + } + }, + "m_Slots": [ + { + "m_Id": "082e9706dffc4c188270980d4e44ce0f" + }, + { + "m_Id": "f2a351a5375c441b8d9ab7e2c9545a77" + }, + { + "m_Id": "41986ac6400d46709d0ef043a67f6b34" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 3, + "m_Type": "UnityEditor.ShaderGraph.Internal.ColorShaderProperty", + "m_ObjectId": "7a046f410ce64aa88438b0bfd412c045", + "m_Guid": { + "m_GuidSerialized": "d47271f5-5a84-47bf-a09e-c825d2aeb013" + }, + "m_Name": "Outline Color 3", + "m_DefaultReferenceName": "Color_551702C5", + "m_OverrideReferenceName": "_OutlineColor3", + "m_GeneratePropertyBlock": true, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": { + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 1.0 + }, + "m_ColorMode": 1 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "7a0f504e4175406dbd8134250f4e350b", + "m_Id": 0, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.SubtractNode", + "m_ObjectId": "7a80e8839f0e4a1d9a6c0814f8793ee6", + "m_Group": { + "m_Id": "42cadae0923e4969b50bbc3f78185934" + }, + "m_Name": "Subtract", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4961.99951171875, + "y": -3452.0, + "width": 130.0, + "height": 118.0 + } + }, + "m_Slots": [ + { + "m_Id": "6fbdcc5a972b4fa883dc5f21e525a376" + }, + { + "m_Id": "0ba4932e164847878ddb7b7bcff96985" + }, + { + "m_Id": "9178663316db43d582f1c4a127d307c6" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "7acfafd73b8c4dfab8c55c18a887e087", + "m_Id": 4, + "m_DisplayName": "R", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "R", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "7b8a19bd115e4167a25b59cb3218a817", + "m_Id": 0, + "m_DisplayName": "A", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 3, + "m_Value": { + "x": 1.0, + "y": 1.0, + "z": 1.0, + "w": 1.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicValueMaterialSlot", + "m_ObjectId": "7c27ccb2c2dc4ca59c5438c3358630ca", + "m_Id": 0, + "m_DisplayName": "A", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 3, + "m_Value": { + "e00": 0.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 0.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 0.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 0.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.SubtractNode", + "m_ObjectId": "7d7696aa6d184b4fb9c316a9dec37aee", + "m_Group": { + "m_Id": "42cadae0923e4969b50bbc3f78185934" + }, + "m_Name": "Subtract", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4959.0, + "y": -3326.0, + "width": 130.0, + "height": 118.0 + } + }, + "m_Slots": [ + { + "m_Id": "4d1cb1a475df49f9a148195a65f5453a" + }, + { + "m_Id": "47d020251e9841a5b1f0fd64396026a1" + }, + { + "m_Id": "62bc551cea604e88b7858cc37d96a98a" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.MultiplyNode", + "m_ObjectId": "7d78a616c2754cc28d1f32cf66ade611", + "m_Group": { + "m_Id": "013228b0fdf1424097798f0973a9a4fb" + }, + "m_Name": "Multiply", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4006.999755859375, + "y": -2796.0, + "width": 130.0, + "height": 118.0 + } + }, + "m_Slots": [ + { + "m_Id": "d9bcb754db834583b6518c5ed5152114" + }, + { + "m_Id": "861d4258049a4a3e8164f7297090f88e" + }, + { + "m_Id": "a7c06457d7454693a8bc3dc95257b2c2" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "7e0fadb2533f496192c1ad3e78642010", + "m_Group": { + "m_Id": "484b51c50485473b819c4f05087b32d7" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4444.0, + "y": -4188.0, + "width": 173.0, + "height": 34.0 + } + }, + "m_Slots": [ + { + "m_Id": "d48c3871e3064027a10ae9f4babd3be0" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "952d0fa5cd744df0b434cd38e9a90b93" + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BlockNode", + "m_ObjectId": "7f2e6b5f15364ed9835d67d0cf4f8f65", + "m_Group": { + "m_Id": "" + }, + "m_Name": "VertexDescription.Tangent", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -2586.0, + "y": -3592.0, + "width": 200.0, + "height": 41.0 + } + }, + "m_Slots": [ + { + "m_Id": "85ff8667d72947edada4e9fb4ff60559" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SerializedDescriptor": "VertexDescription.Tangent" +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "7f3d71a6c96847c099da45f95aafbecb", + "m_Id": 1, + "m_DisplayName": "G", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "G", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PositionMaterialSlot", + "m_ObjectId": "8036d0e6090b456e9b4ea87227868236", + "m_Id": 0, + "m_DisplayName": "Position", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Position", + "m_StageCapability": 1, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [ + "X", + "Y", + "Z" + ], + "m_Space": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "80e665a5eeb64730a51742f698bf0d48", + "m_Id": 4, + "m_DisplayName": "R", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "R", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "8135ca333f8f4ea78163743e6ec1f55c", + "m_Group": { + "m_Id": "42cadae0923e4969b50bbc3f78185934" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4081.999755859375, + "y": -3140.0, + "width": 156.0, + "height": 34.0 + } + }, + "m_Slots": [ + { + "m_Id": "d6a6a119394e4082a11bc024a6e42ef8" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "53073e5ea924459fa6681a4943e9f947" + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicValueMaterialSlot", + "m_ObjectId": "81bdb47901ef48e5a588c6724b1b0142", + "m_Id": 2, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "e00": 0.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 0.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 0.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 0.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.Internal.Vector1ShaderProperty", + "m_ObjectId": "81e8ed0534534674a74263e6161a2a1a", + "m_Guid": { + "m_GuidSerialized": "78aab961-c4a8-41f3-b203-1239c3b33b13" + }, + "m_Name": "Underlay Dilate", + "m_DefaultReferenceName": "Vector1_D48690B9", + "m_OverrideReferenceName": "_UnderlayDilate", + "m_GeneratePropertyBlock": true, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": 0.0, + "m_FloatType": 0, + "m_RangeValues": { + "x": 0.0, + "y": 1.0 + } +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.Internal.Vector1ShaderProperty", + "m_ObjectId": "82af2db1018543d7832af96c1cfc981f", + "m_Guid": { + "m_GuidSerialized": "37906c7b-9a3a-454b-a62a-9aa097e64bde" + }, + "m_Name": "Light Angle", + "m_DefaultReferenceName": "Vector1_82af2db1018543d7832af96c1cfc981f", + "m_OverrideReferenceName": "_LightAngle", + "m_GeneratePropertyBlock": true, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": 0.0, + "m_FloatType": 1, + "m_RangeValues": { + "x": 0.0, + "y": 6.28000020980835 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "82d5443fe54d4a3b9420f8745d00a632", + "m_Id": 5, + "m_DisplayName": "Softness", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Softness", + "m_StageCapability": 3, + "m_Value": 8.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BlockNode", + "m_ObjectId": "83c51d5b2f7b4eb785248f419181cb87", + "m_Group": { + "m_Id": "" + }, + "m_Name": "SurfaceDescription.Occlusion", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": 0.0, + "y": 0.0, + "width": 0.0, + "height": 0.0 + } + }, + "m_Slots": [ + { + "m_Id": "944ebbc49c8a4cddb5834e3beab965a2" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SerializedDescriptor": "SurfaceDescription.Occlusion" +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector2MaterialSlot", + "m_ObjectId": "84dc74cdbd8c45e1b189e4fd9a69942d", + "m_Id": 0, + "m_DisplayName": "Outline Offset 3", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.CustomFunctionNode", + "m_ObjectId": "85a1ad8e741e41759002e8cdc8cd0b96", + "m_Group": { + "m_Id": "d0a791a544614667962a9a9a9ce0c68a" + }, + "m_Name": "ScreenSpaceRatio (Custom Function)", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -5800.99951171875, + "y": -3363.0, + "width": 258.0, + "height": 142.0 + } + }, + "m_Slots": [ + { + "m_Id": "6e13f3cd573c467a94379f45d96cb690" + }, + { + "m_Id": "8e6ed600f6504f4083092f5b511e44c4" + }, + { + "m_Id": "93b161cce4504cb79c97b6d8db178de7" + }, + { + "m_Id": "2bf5f2fdd2984599b7323d10cfb1d240" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SourceType": 0, + "m_FunctionName": "ScreenSpaceRatio", + "m_FunctionSource": "96de908384869cd409c75efa351d5edf", + "m_FunctionBody": "Enter function body here..." +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "85b5940eb77e4625812ded7215bab8d7", + "m_Group": { + "m_Id": "42cadae0923e4969b50bbc3f78185934" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4081.999755859375, + "y": -3096.0, + "width": 156.0, + "height": 34.0 + } + }, + "m_Slots": [ + { + "m_Id": "ada023d617104472b8ab75a81558c0a1" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "7a046f410ce64aa88438b0bfd412c045" + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.TangentMaterialSlot", + "m_ObjectId": "85ff8667d72947edada4e9fb4ff60559", + "m_Id": 0, + "m_DisplayName": "Tangent", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Tangent", + "m_StageCapability": 1, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [ + "X", + "Y", + "Z" + ], + "m_Space": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicValueMaterialSlot", + "m_ObjectId": "861d4258049a4a3e8164f7297090f88e", + "m_Id": 1, + "m_DisplayName": "B", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 3, + "m_Value": { + "e00": 2.0, + "e01": 2.0, + "e02": 2.0, + "e03": 2.0, + "e10": 2.0, + "e11": 2.0, + "e12": 2.0, + "e13": 2.0, + "e20": 2.0, + "e21": 2.0, + "e22": 2.0, + "e23": 2.0, + "e30": 2.0, + "e31": 2.0, + "e32": 2.0, + "e33": 2.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.Internal.Vector4ShaderProperty", + "m_ObjectId": "867a4ae13c0d4a028c71bc1063824c14", + "m_Guid": { + "m_GuidSerialized": "d483c212-0a30-4f6d-b94d-9abbc83a6522" + }, + "m_Name": "Outline Width", + "m_DefaultReferenceName": "Vector4_C68C9E14", + "m_OverrideReferenceName": "_IsoPerimeter", + "m_GeneratePropertyBlock": true, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 2, + "m_Hidden": false, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicValueMaterialSlot", + "m_ObjectId": "8695190a5e614f2d90081871a8a06fc2", + "m_Id": 1, + "m_DisplayName": "B", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 3, + "m_Value": { + "e00": 2.0, + "e01": 2.0, + "e02": 2.0, + "e03": 2.0, + "e10": 2.0, + "e11": 2.0, + "e12": 2.0, + "e13": 2.0, + "e20": 2.0, + "e21": 2.0, + "e22": 2.0, + "e23": 2.0, + "e30": 2.0, + "e31": 2.0, + "e32": 2.0, + "e33": 2.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BlockNode", + "m_ObjectId": "86e21b7b6b7a44238607e41b8a9fb9a4", + "m_Group": { + "m_Id": "" + }, + "m_Name": "SurfaceDescription.Smoothness", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": 0.0, + "y": 0.0, + "width": 0.0, + "height": 0.0 + } + }, + "m_Slots": [ + { + "m_Id": "0801f576ce79452483b42e485405244d" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SerializedDescriptor": "SurfaceDescription.Smoothness" +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "8764669016f6442f8152593c18a649d7", + "m_Id": 4, + "m_DisplayName": "RGBA", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "RGBA", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicValueMaterialSlot", + "m_ObjectId": "880bb02c6c6b49b18aa6ebc66dc566a0", + "m_Id": 0, + "m_DisplayName": "A", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 3, + "m_Value": { + "e00": 0.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 0.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 0.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 0.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.CustomFunctionNode", + "m_ObjectId": "88253223d2c34ecfab92b0c344048f94", + "m_Group": { + "m_Id": "484b51c50485473b819c4f05087b32d7" + }, + "m_Name": "ComputeSDF (Custom Function)", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4226.0, + "y": -4323.0, + "width": 227.99998474121095, + "height": 190.0 + } + }, + "m_Slots": [ + { + "m_Id": "c52a1744a9a14989b0ae452ad6de6061" + }, + { + "m_Id": "a03db80c558b4f87a330c5ae0a9443a5" + }, + { + "m_Id": "8f1b1d1e8ff24b3284993e52354e54fa" + }, + { + "m_Id": "5da82bf481f8489ebd05e997f617f51b" + }, + { + "m_Id": "82d5443fe54d4a3b9420f8745d00a632" + }, + { + "m_Id": "61133d79a89048c195f54939b2a1d30a" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SourceType": 0, + "m_FunctionName": "ComputeSDF", + "m_FunctionSource": "96de908384869cd409c75efa351d5edf", + "m_FunctionBody": "Enter function body here..." +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector2MaterialSlot", + "m_ObjectId": "8a08179f99d649d289b8053d5fa0ad22", + "m_Id": 0, + "m_DisplayName": "Underlay Offset", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0 + }, + "m_Labels": [ + "X", + "Y" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "8b66f4e6bc9d4662b3218ac33a69839f", + "m_Id": 5, + "m_DisplayName": "G", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "G", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "8c38a5d8327f456e9783740c05382619", + "m_Id": 3, + "m_DisplayName": "Color2", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Color2", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "8cbd81814903479ea1d3151c1f38183e", + "m_Id": 6, + "m_DisplayName": "B", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 3, + "m_Type": "UnityEditor.ShaderGraph.Internal.ColorShaderProperty", + "m_ObjectId": "8cf8aae64c1d443f9303126886b40f17", + "m_Guid": { + "m_GuidSerialized": "8d78c9a5-aaef-41fb-af68-2358e401d7ac" + }, + "m_Name": "_UnderlayColor", + "m_DefaultReferenceName": "Color_2F5FE804", + "m_OverrideReferenceName": "_UnderlayColor", + "m_GeneratePropertyBlock": true, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": { + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 1.0 + }, + "m_ColorMode": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector2MaterialSlot", + "m_ObjectId": "8e6aee1173864e58be589084897a3f35", + "m_Id": 0, + "m_DisplayName": "UV_1", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "UV_1", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector2MaterialSlot", + "m_ObjectId": "8e6ed600f6504f4083092f5b511e44c4", + "m_Id": 0, + "m_DisplayName": "UV", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "UV", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0 + }, + "m_Labels": [ + "X", + "Y" + ] +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.Internal.Vector2ShaderProperty", + "m_ObjectId": "8ed907a2cc7949b68a283ae243ea1977", + "m_Guid": { + "m_GuidSerialized": "36803443-a9bc-4f3c-a4f2-7d66a5417ac1" + }, + "m_Name": "Outline Offset 3", + "m_DefaultReferenceName": "", + "m_OverrideReferenceName": "_OutlineOffset3", + "m_GeneratePropertyBlock": true, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "8f1b1d1e8ff24b3284993e52354e54fa", + "m_Id": 3, + "m_DisplayName": "SDR", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "SDR", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "9147636b0cfa466a9b37a013d8f693bf", + "m_Group": { + "m_Id": "daaf032a109749a88c9b8ff8e1f8b541" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -5421.99951171875, + "y": -3902.0, + "width": 153.0, + "height": 34.0 + } + }, + "m_Slots": [ + { + "m_Id": "a4f471e3221c4134b291bd9d2ba22db6" + } + ], + "synonyms": [], + "m_Precision": 1, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "a6bbb32e8d884be9bb36db91fe4b81b1" + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "9178663316db43d582f1c4a127d307c6", + "m_Id": 2, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.SplitNode", + "m_ObjectId": "91890fe48ebe4717aea61ecaf3ad4861", + "m_Group": { + "m_Id": "ecf16c34d46f4502ac601f0c38c7576b" + }, + "m_Name": "Split", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -2983.000244140625, + "y": -3468.0, + "width": 119.99999237060547, + "height": 149.0 + } + }, + "m_Slots": [ + { + "m_Id": "3dccd64e7f324bc1a75c1479d7a67c51" + }, + { + "m_Id": "e444f2c81d1e48329fa2c91005277e8d" + }, + { + "m_Id": "b2c26292b7434733878a9b042f44de89" + }, + { + "m_Id": "964fea1fd4b24f4daf5bef84c4b45118" + }, + { + "m_Id": "deac82280a2b43078e0e40863e2d974c" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "91d6a9a5fbc04ea49075cb51835e7264", + "m_Id": 2, + "m_DisplayName": "B", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "928621a3ca2d41c89a10336bbbc81ddc", + "m_Id": 5, + "m_DisplayName": "G", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "G", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "93b161cce4504cb79c97b6d8db178de7", + "m_Id": 3, + "m_DisplayName": "TextureSize", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "TextureSize", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.Rendering.Universal.ShaderGraph.UniversalTarget", + "m_ObjectId": "94300469581b4924ac7dda496811d45d", + "m_ActiveSubTarget": { + "m_Id": "a0b9274619da48a59f26fe58997479ee" + }, + "m_SurfaceType": 1, + "m_AlphaMode": 0, + "m_TwoSided": true, + "m_AlphaClip": true, + "m_CustomEditorGUI": "TMPro.EditorUtilities.TMP_SDFShaderGUI" +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "944ebbc49c8a4cddb5834e3beab965a2", + "m_Id": 0, + "m_DisplayName": "Ambient Occlusion", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Occlusion", + "m_StageCapability": 2, + "m_Value": 1.0, + "m_DefaultValue": 1.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "945b45993dd84a979755b98c48138f72", + "m_Id": 0, + "m_DisplayName": "Width", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Width", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.Internal.Vector1ShaderProperty", + "m_ObjectId": "952d0fa5cd744df0b434cd38e9a90b93", + "m_Guid": { + "m_GuidSerialized": "ce395871-ddeb-47c3-a31d-07855800c197" + }, + "m_Name": "_UnderlaySoftness", + "m_DefaultReferenceName": "Vector1_F2B9E3EF", + "m_OverrideReferenceName": "_UnderlaySoftness", + "m_GeneratePropertyBlock": true, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": 0.0, + "m_FloatType": 0, + "m_RangeValues": { + "x": 0.0, + "y": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "95928bcb6a284b8d88105a84c2e1d3ce", + "m_Group": { + "m_Id": "013228b0fdf1424097798f0973a9a4fb" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4778.00048828125, + "y": -2581.000244140625, + "width": 155.00001525878907, + "height": 34.0 + } + }, + "m_Slots": [ + { + "m_Id": "d880558893fb442b9320cf55885d1117" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "2d0a269511e34bd1ba9056d2c939dff2" + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "964fea1fd4b24f4daf5bef84c4b45118", + "m_Id": 3, + "m_DisplayName": "B", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.GroupData", + "m_ObjectId": "98934a69591249d5b8b92b39045359a3", + "m_Title": "Outline1 Texture", + "m_Position": { + "x": -4670.00048828125, + "y": -2474.000244140625 + } +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.Internal.Vector1ShaderProperty", + "m_ObjectId": "998db5e5901e45b29040eb2099370071", + "m_Guid": { + "m_GuidSerialized": "6f383614-f2ad-4269-be8f-87b0ecb03cf0" + }, + "m_Name": "Bevel Clamp", + "m_DefaultReferenceName": "Vector1_5BD7E808", + "m_OverrideReferenceName": "_BevelClamp", + "m_GeneratePropertyBlock": true, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": 0.0, + "m_FloatType": 1, + "m_RangeValues": { + "x": 0.0, + "y": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.SampleTexture2DNode", + "m_ObjectId": "9c228fac287d446296b91a4acf5cec59", + "m_Group": { + "m_Id": "42cadae0923e4969b50bbc3f78185934" + }, + "m_Name": "Sample Texture 2D", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4600.0, + "y": -3498.0, + "width": 183.99998474121095, + "height": 253.0 + } + }, + "m_Slots": [ + { + "m_Id": "582d6e289dbe4fdca7cf0307273eaa2f" + }, + { + "m_Id": "1db37082bf844442804487b4944352de" + }, + { + "m_Id": "8b66f4e6bc9d4662b3218ac33a69839f" + }, + { + "m_Id": "4a66dcbe712a4d40bd8f355b834594b5" + }, + { + "m_Id": "a0285c9c381a49cba194709efa0a7c85" + }, + { + "m_Id": "b2728d0dd3ce40678867c94a7d977916" + }, + { + "m_Id": "e141833aa78b4fd59ecad949beb43a78" + }, + { + "m_Id": "51f76f8a53ad43a4ad028426548ce9ba" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_TextureType": 0, + "m_NormalMapSpace": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "9c26fdddba244d36a854298c00473247", + "m_Id": 3, + "m_DisplayName": "SDR", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "SDR", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.UVNode", + "m_ObjectId": "9d3c3383d5934a17bf9efbb7fd9e9043", + "m_Group": { + "m_Id": "42cadae0923e4969b50bbc3f78185934" + }, + "m_Name": "UV", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -5443.0, + "y": -3315.0, + "width": 144.99998474121095, + "height": 130.0 + } + }, + "m_Slots": [ + { + "m_Id": "232b1aa09e67479abae141d3c76d3c5b" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_OutputChannel": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "9e6e50a71d9843b49b62ebe1cf7d3d59", + "m_Group": { + "m_Id": "d258902c6ec74942afdb9ebf8c1d07f8" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4486.0, + "y": -3865.99951171875, + "width": 135.3330078125, + "height": 33.999996185302737 + } + }, + "m_Slots": [ + { + "m_Id": "3535ae87c6dd4769b52b20d9eca61069" + } + ], + "synonyms": [], + "m_Precision": 1, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "3e372195f4bd4845852a37839e5b602d" + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "9e87ce9607e14015a3790c528ca5dfda", + "m_Group": { + "m_Id": "98934a69591249d5b8b92b39045359a3" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4635.00048828125, + "y": -2239.0, + "width": 167.0, + "height": 34.0 + } + }, + "m_Slots": [ + { + "m_Id": "75c5657544c648058b20cea090f48dbf" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "3fdf4b7bc5d4426492dcc057603ef4a6" + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicValueMaterialSlot", + "m_ObjectId": "9eb8137a6c2e41bbafdc8b0732dd47a3", + "m_Id": 0, + "m_DisplayName": "A", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 3, + "m_Value": { + "e00": 0.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 0.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 0.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 0.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BooleanMaterialSlot", + "m_ObjectId": "9eeec1a9713045af8845cea263d5ea48", + "m_Id": 6, + "m_DisplayName": "IsFront", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "IsFront", + "m_StageCapability": 3, + "m_Value": false, + "m_DefaultValue": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.MultiplyNode", + "m_ObjectId": "9f0de188085746d5a19073da1de85ddb", + "m_Group": { + "m_Id": "013228b0fdf1424097798f0973a9a4fb" + }, + "m_Name": "Multiply", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4152.0, + "y": -2771.0, + "width": 130.0, + "height": 118.0 + } + }, + "m_Slots": [ + { + "m_Id": "7c27ccb2c2dc4ca59c5438c3358630ca" + }, + { + "m_Id": "373f1de8db6c429c9d46c781f741d7a4" + }, + { + "m_Id": "fd0b096ed5b74f9e9ec51327be200731" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.NormalMaterialSlot", + "m_ObjectId": "a0206f980dc6455f84f5a8442838c726", + "m_Id": 0, + "m_DisplayName": "Normal (Tangent Space)", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "NormalTS", + "m_StageCapability": 2, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [], + "m_Space": 3 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "a0285c9c381a49cba194709efa0a7c85", + "m_Id": 7, + "m_DisplayName": "A", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "a03db80c558b4f87a330c5ae0a9443a5", + "m_Id": 1, + "m_DisplayName": "SD", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "SD", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.Rendering.Universal.ShaderGraph.UniversalLitSubTarget", + "m_ObjectId": "a0b9274619da48a59f26fe58997479ee", + "m_WorkflowMode": 1, + "m_NormalDropOffSpace": 0, + "m_ClearCoat": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.NormalMaterialSlot", + "m_ObjectId": "a3f8b6e8ae7f48e2989a029904401502", + "m_Id": 0, + "m_DisplayName": "Normal", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Normal", + "m_StageCapability": 1, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [ + "X", + "Y", + "Z" + ], + "m_Space": 0 +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.CustomFunctionNode", + "m_ObjectId": "a455bd79094c4413a7b7dd80ca8b9368", + "m_Group": { + "m_Id": "013228b0fdf1424097798f0973a9a4fb" + }, + "m_Name": "GenerateUV (Custom Function)", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4606.99951171875, + "y": -2689.0, + "width": 221.99998474121095, + "height": 142.0 + } + }, + "m_Slots": [ + { + "m_Id": "7027aaab25924266a063a05df0aa39b3" + }, + { + "m_Id": "2c7a9460724b47daad8df1be144de7c6" + }, + { + "m_Id": "55ffa45ec3654d5e88089fb40d2b0465" + }, + { + "m_Id": "e495a9f7a11f4eb89334e83be154ceb9" + } + ], + "synonyms": [], + "m_Precision": 1, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SourceType": 0, + "m_FunctionName": "GenerateUV", + "m_FunctionSource": "96de908384869cd409c75efa351d5edf", + "m_FunctionBody": "Enter function body here..." +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.SamplerStateShaderProperty", + "m_ObjectId": "a4ad98d8828c424384229c344ebe2ed0", + "m_Guid": { + "m_GuidSerialized": "f98fc1a2-bb81-4bd1-a207-23d3a90d518e" + }, + "m_Name": "SamplerState", + "m_DefaultReferenceName": "", + "m_OverrideReferenceName": "SamplerState_Linear_Clamp", + "m_GeneratePropertyBlock": false, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": { + "m_filter": 0, + "m_wrap": 1 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "a4f471e3221c4134b291bd9d2ba22db6", + "m_Id": 0, + "m_DisplayName": "_GradientScale", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "a535f3bcbeb14622bb177eb6f46e76f4", + "m_Group": { + "m_Id": "98934a69591249d5b8b92b39045359a3" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4628.00048828125, + "y": -2283.0, + "width": 157.00001525878907, + "height": 34.0 + } + }, + "m_Slots": [ + { + "m_Id": "6dfc1177dd0541a7a780fbf911ad1956" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "ec79eb447dfd47a9b3380344c6a60f43" + } +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.Internal.Vector1ShaderProperty", + "m_ObjectId": "a6bbb32e8d884be9bb36db91fe4b81b1", + "m_Guid": { + "m_GuidSerialized": "6aa76edf-7b80-46ac-add4-406cf1d85493" + }, + "m_Name": "_GradientScale", + "m_DefaultReferenceName": "Vector1_EAE27356", + "m_OverrideReferenceName": "_GradientScale", + "m_GeneratePropertyBlock": true, + "m_Precision": 1, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": 10.0, + "m_FloatType": 0, + "m_RangeValues": { + "x": 0.0, + "y": 1.0 + } +} + +{ + "m_SGVersion": 3, + "m_Type": "UnityEditor.ShaderGraph.Internal.ColorShaderProperty", + "m_ObjectId": "a6c38edd2e8743a9b057ba8452b9f129", + "m_Guid": { + "m_GuidSerialized": "9fc942ee-4a1d-4ced-a5a6-81893e3ddb63" + }, + "m_Name": "Light Color", + "m_DefaultReferenceName": "Color_a6c38edd2e8743a9b057ba8452b9f129", + "m_OverrideReferenceName": "_SpecularColor", + "m_GeneratePropertyBlock": true, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": { + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "m_ColorMode": 1 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "a75f7ac601c446469802fe7754c1f279", + "m_Id": 0, + "m_DisplayName": "Color1", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Color1", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "a7942746b5564dc7bbbae1deb2403022", + "m_Id": 0, + "m_DisplayName": "_GradientScale", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicValueMaterialSlot", + "m_ObjectId": "a7c06457d7454693a8bc3dc95257b2c2", + "m_Id": 2, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "e00": 0.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 0.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 0.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 0.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.Rendering.HighDefinition.ShaderGraph.LightingData", + "m_ObjectId": "a8c49a47cb934f7e8e4d88fce06df6ff", + "m_NormalDropOffSpace": 0, + "m_BlendPreserveSpecular": true, + "m_ReceiveDecals": true, + "m_ReceiveSSR": true, + "m_ReceiveSSRTransparent": false, + "m_SpecularAA": false, + "m_SpecularOcclusionMode": 0, + "m_OverrideBakedGI": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "aa2794b8f0e24bf281d22e0fef0647be", + "m_Id": 2, + "m_DisplayName": "B", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.CustomFunctionNode", + "m_ObjectId": "aa3e347d733e48f7b65d8a8847370eec", + "m_Group": { + "m_Id": "" + }, + "m_Name": "EvaluateLight (Custom Function)", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -3631.0, + "y": -3810.0, + "width": 230.0, + "height": 118.0 + } + }, + "m_Slots": [ + { + "m_Id": "0699eea947fc426cbfeb8744cf120222" + }, + { + "m_Id": "0c4dc51f26484c26ad88a3fe4002abcd" + }, + { + "m_Id": "d5173cc3c6cd4f1998550f3187a3e9c8" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SourceType": 0, + "m_FunctionName": "EvaluateLight", + "m_FunctionSource": "96de908384869cd409c75efa351d5edf", + "m_FunctionBody": "Enter function body here..." +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "aa87c72ac0e64469acc34f936f00b3d0", + "m_Group": { + "m_Id": "484b51c50485473b819c4f05087b32d7" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4444.0, + "y": -4225.0, + "width": 193.0, + "height": 34.0 + } + }, + "m_Slots": [ + { + "m_Id": "0d7878dd226d4cfb81a991dc312309fc" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "81e8ed0534534674a74263e6161a2a1a" + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "abd59150589b436cadf8c9e6f43ccb8e", + "m_Id": 0, + "m_DisplayName": "RGBA", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "RGBA", + "m_StageCapability": 2, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BlockNode", + "m_ObjectId": "aca823a8188948c782eddaf0f45e1868", + "m_Group": { + "m_Id": "" + }, + "m_Name": "SurfaceDescription.NormalOS", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -2542.0, + "y": -3404.000244140625, + "width": 200.0, + "height": 40.66650390625 + } + }, + "m_Slots": [ + { + "m_Id": "e386b183a18245a796b024022f7f3074" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SerializedDescriptor": "SurfaceDescription.NormalOS" +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Texture2DPropertiesNode", + "m_ObjectId": "acd0cd5a177f4a97bf23db7219305e3f", + "m_Group": { + "m_Id": "d258902c6ec74942afdb9ebf8c1d07f8" + }, + "m_Name": "Texel Size", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4348.0, + "y": -3905.99951171875, + "width": 185.33299255371095, + "height": 101.33324432373047 + } + }, + "m_Slots": [ + { + "m_Id": "945b45993dd84a979755b98c48138f72" + }, + { + "m_Id": "e51a636b2621440eb94cc802c1cf4bfc" + }, + { + "m_Id": "1bdde3efd3b7464b8934c555be0f8a48" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BlockNode", + "m_ObjectId": "ad3e1d26f4404555a8dd29223caaf1ef", + "m_Group": { + "m_Id": "" + }, + "m_Name": "SurfaceDescription.Metallic", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": 0.0, + "y": 0.0, + "width": 0.0, + "height": 0.0 + } + }, + "m_Slots": [ + { + "m_Id": "b46afdad84944599b00e887d2ce29cc3" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SerializedDescriptor": "SurfaceDescription.Metallic" +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "ada023d617104472b8ab75a81558c0a1", + "m_Id": 0, + "m_DisplayName": "Outline Color 3", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "aef5c44f84e04c3185e0b93e95e34204", + "m_Group": { + "m_Id": "42cadae0923e4969b50bbc3f78185934" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -5264.99951171875, + "y": -3142.0, + "width": 159.0, + "height": 34.0 + } + }, + "m_Slots": [ + { + "m_Id": "84dc74cdbd8c45e1b189e4fd9a69942d" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "8ed907a2cc7949b68a283ae243ea1977" + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Texture2DInputMaterialSlot", + "m_ObjectId": "b000f852aa984e9dae25b125a4607f4e", + "m_Id": 1, + "m_DisplayName": "Texture", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Texture", + "m_StageCapability": 3, + "m_BareResource": false, + "m_Texture": { + "m_SerializedTexture": "{\"texture\":{\"instanceID\":0}}", + "m_Guid": "" + }, + "m_DefaultType": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "b015d1b7e4134c59baf6851e7649802c", + "m_Id": 0, + "m_DisplayName": "R", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "R", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.Internal.Vector1ShaderProperty", + "m_ObjectId": "b0b352c4503a43d083a64e57352b29a0", + "m_Guid": { + "m_GuidSerialized": "01cfcc78-60aa-4f71-a1e3-8d8df6dae253" + }, + "m_Name": "Reflectivity Power", + "m_DefaultReferenceName": "Vector1_b0b352c4503a43d083a64e57352b29a0", + "m_OverrideReferenceName": "_Reflectivity", + "m_GeneratePropertyBlock": true, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": 5.0, + "m_FloatType": 1, + "m_RangeValues": { + "x": 5.0, + "y": 15.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.VertexColorNode", + "m_ObjectId": "b1188549725543d485436c2e921ffbb2", + "m_Group": { + "m_Id": "013228b0fdf1424097798f0973a9a4fb" + }, + "m_Name": "Vertex Color", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4142.0, + "y": -2890.0, + "width": 116.0, + "height": 94.0 + } + }, + "m_Slots": [ + { + "m_Id": "281bcee4777040f8a31ee0e10344e98d" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 2, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.SampleTexture2DNode", + "m_ObjectId": "b163c9f1666644b0bba62cf0e12df7bc", + "m_Group": { + "m_Id": "013228b0fdf1424097798f0973a9a4fb" + }, + "m_Name": "Sample Texture 2D", + "m_DrawState": { + "m_Expanded": false, + "m_Position": { + "serializedVersion": "2", + "x": -4367.0, + "y": -2713.0, + "width": 180.0, + "height": 181.0 + } + }, + "m_Slots": [ + { + "m_Id": "cce40479b6284b6fa3174db9f09d0ac9" + }, + { + "m_Id": "80e665a5eeb64730a51742f698bf0d48" + }, + { + "m_Id": "1f46181633594ae0a1fb2adb76b42981" + }, + { + "m_Id": "8cbd81814903479ea1d3151c1f38183e" + }, + { + "m_Id": "cfaf3f3a5a1146e194cddad30c95aada" + }, + { + "m_Id": "b43489e37a5c4df88f15844292a55ec7" + }, + { + "m_Id": "cd7281fb41aa4e61ac0fdf71d4f4bd46" + }, + { + "m_Id": "f01d52cdcb1647aab35782b4af535efd" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_TextureType": 0, + "m_NormalMapSpace": 1 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicValueMaterialSlot", + "m_ObjectId": "b224a1cf80604103ad085c799995f3c2", + "m_Id": 2, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "e00": 0.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 0.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 0.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 0.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Texture2DInputMaterialSlot", + "m_ObjectId": "b2728d0dd3ce40678867c94a7d977916", + "m_Id": 1, + "m_DisplayName": "Texture", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Texture", + "m_StageCapability": 3, + "m_BareResource": false, + "m_Texture": { + "m_SerializedTexture": "{\"texture\":{\"fileID\":-2362172177983852347,\"guid\":\"dda5bcb0d1e9515498f6e4e038bbefe6\",\"type\":2}}", + "m_Guid": "" + }, + "m_DefaultType": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "b2baf44eae52473cb6cda7b1debece01", + "m_Id": 0, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "b2c26292b7434733878a9b042f44de89", + "m_Id": 2, + "m_DisplayName": "G", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "G", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "b42e6dbfbc864097af182cbff5c0c1fb", + "m_Id": 0, + "m_DisplayName": "Outline Color 1", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Texture2DInputMaterialSlot", + "m_ObjectId": "b43489e37a5c4df88f15844292a55ec7", + "m_Id": 1, + "m_DisplayName": "Texture", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Texture", + "m_StageCapability": 3, + "m_BareResource": false, + "m_Texture": { + "m_SerializedTexture": "{\"texture\":{\"fileID\":-2362172177983852347,\"guid\":\"dda5bcb0d1e9515498f6e4e038bbefe6\",\"type\":2}}", + "m_Guid": "" + }, + "m_DefaultType": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "b46afdad84944599b00e887d2ce29cc3", + "m_Id": 0, + "m_DisplayName": "Metallic", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Metallic", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.MultiplyNode", + "m_ObjectId": "b4a40cb6acd441acb83cfe0240bf910d", + "m_Group": { + "m_Id": "484b51c50485473b819c4f05087b32d7" + }, + "m_Name": "Multiply", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4750.99951171875, + "y": -4274.0, + "width": 130.0, + "height": 118.0 + } + }, + "m_Slots": [ + { + "m_Id": "d0b10e52e21941b183f5f635894c76c8" + }, + { + "m_Id": "0d6a57754b824f6db9cefa6953bc06a9" + }, + { + "m_Id": "773b90134e894e429203c0c83e80b9de" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Texture2DPropertiesNode", + "m_ObjectId": "b571db753a1948d5a6f1de4e7d0c7238", + "m_Group": { + "m_Id": "daaf032a109749a88c9b8ff8e1f8b541" + }, + "m_Name": "Texel Size", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -5581.99951171875, + "y": -3867.0, + "width": 183.99998474121095, + "height": 100.99999237060547 + } + }, + "m_Slots": [ + { + "m_Id": "5b3ff4ee364f4d7a923b530ad60d8762" + }, + { + "m_Id": "c183b5bd9bbe45089f93996e73110918" + }, + { + "m_Id": "1196ae398cc348349ab0c1a23fdab4bd" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "b691728a389a417d9b4f2d02541209c2", + "m_Id": 6, + "m_DisplayName": "B", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "b7f9ac55517141868bfb9d2ad6429792", + "m_Id": 6, + "m_DisplayName": "B", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "b85d677872b44421bf5536f42ba0267c", + "m_Id": 3, + "m_DisplayName": "Color0", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Color0", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.CombineNode", + "m_ObjectId": "bc9afcb18afa4ccc82d2cdc34d3f4641", + "m_Group": { + "m_Id": "daaf032a109749a88c9b8ff8e1f8b541" + }, + "m_Name": "Combine", + "m_DrawState": { + "m_Expanded": false, + "m_Position": { + "serializedVersion": "2", + "x": -5392.0, + "y": -3867.0, + "width": 125.99999237060547, + "height": 118.0 + } + }, + "m_Slots": [ + { + "m_Id": "5e42524569844befad16fda5a94eb9cb" + }, + { + "m_Id": "54d7a93ffec5490aa4591da23a21b693" + }, + { + "m_Id": "aa2794b8f0e24bf281d22e0fef0647be" + }, + { + "m_Id": "200245fc8bbe4826b209ab5f7ffe074c" + }, + { + "m_Id": "fc2e62201c5847e798fd939314413fcd" + }, + { + "m_Id": "fe11fa80cc1847a5a37f6757d521cf25" + }, + { + "m_Id": "de0c6f7f7af94defa6c3dbc6433de9d4" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "c183b5bd9bbe45089f93996e73110918", + "m_Id": 2, + "m_DisplayName": "Height", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Height", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.CustomFunctionNode", + "m_ObjectId": "c234e5216678436195ee1a5914bc79da", + "m_Group": { + "m_Id": "98934a69591249d5b8b92b39045359a3" + }, + "m_Name": "GenerateUV (Custom Function)", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4446.0, + "y": -2347.0, + "width": 221.99998474121095, + "height": 142.0 + } + }, + "m_Slots": [ + { + "m_Id": "8e6aee1173864e58be589084897a3f35" + }, + { + "m_Id": "3db1608e927e4102a3c3a88e9fcab39a" + }, + { + "m_Id": "0f7ffb6d2de4447f9736780cbcee8e07" + }, + { + "m_Id": "d4954b7bbbb0412cbc997bcbe7dfa808" + } + ], + "synonyms": [], + "m_Precision": 1, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SourceType": 0, + "m_FunctionName": "GenerateUV", + "m_FunctionSource": "96de908384869cd409c75efa351d5edf", + "m_FunctionBody": "Enter function body here..." +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.UVMaterialSlot", + "m_ObjectId": "c35312edaa2344788b1964ee2f63a236", + "m_Id": 2, + "m_DisplayName": "UV", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "UV", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0 + }, + "m_Labels": [], + "m_Channel": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Texture2DMaterialSlot", + "m_ObjectId": "c3e6d7c20c184bf39fd8822130e693e7", + "m_Id": 0, + "m_DisplayName": "_MainTex", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_BareResource": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector2MaterialSlot", + "m_ObjectId": "c422a9a9ff824176aad2241f58c44d0b", + "m_Id": 0, + "m_DisplayName": "Outline Offset 1", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "c478c32c45884c57a62f7b2aa8ddc3b0", + "m_Id": 2, + "m_DisplayName": "Alpha", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Alpha", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "c52a1744a9a14989b0ae452ad6de6061", + "m_Id": 0, + "m_DisplayName": "SSR", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "SSR", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "c6bdb985bc16435fa72f5a3c81bb633c", + "m_Id": 6, + "m_DisplayName": "B", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "c7d4094601ac4bc1aead609c72b1f1c1", + "m_Id": 4, + "m_DisplayName": "R", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "R", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "c7ddee91dc5b48dc828309c77fdb0b88", + "m_Group": { + "m_Id": "484b51c50485473b819c4f05087b32d7" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4444.0, + "y": -4266.0, + "width": 153.0, + "height": 34.0 + } + }, + "m_Slots": [ + { + "m_Id": "a7942746b5564dc7bbbae1deb2403022" + } + ], + "synonyms": [], + "m_Precision": 1, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "a6bbb32e8d884be9bb36db91fe4b81b1" + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.SamplerStateMaterialSlot", + "m_ObjectId": "c88fcbaeea954a5f9c68c339fa8b604d", + "m_Id": 3, + "m_DisplayName": "Sampler", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Sampler", + "m_StageCapability": 3, + "m_BareResource": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "c9b722d107ce4cd6a748c883472b9b0f", + "m_Id": 7, + "m_DisplayName": "A", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "c9d7f0dbae7d422985a1cc87c025e76b", + "m_Group": { + "m_Id": "42cadae0923e4969b50bbc3f78185934" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4312.0, + "y": -3179.000244140625, + "width": 144.0, + "height": 34.0 + } + }, + "m_Slots": [ + { + "m_Id": "79147f6986644769b58d9ed64fe771e1" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "cb3c0c3f08654b068bea44c4ffb15f4a" + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Internal.Texture2DShaderProperty", + "m_ObjectId": "c9ec735d1a1046769e5601b2c97c849a", + "m_Guid": { + "m_GuidSerialized": "281a9526-c332-4471-a44e-ece4a1e95ef6" + }, + "m_Name": "Face Texture", + "m_DefaultReferenceName": "Texture2D_75569DEA", + "m_OverrideReferenceName": "_FaceTex", + "m_GeneratePropertyBlock": true, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": { + "m_SerializedTexture": "{\"texture\":{\"instanceID\":0}}", + "m_Guid": "" + }, + "m_Modifiable": true, + "m_DefaultType": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "ca2a1083dc014f39ab8af0cdf140866b", + "m_Id": 0, + "m_DisplayName": "_FaceTex_ST", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Internal.BooleanShaderProperty", + "m_ObjectId": "cb3c0c3f08654b068bea44c4ffb15f4a", + "m_Guid": { + "m_GuidSerialized": "21009d12-8d94-4273-b0d0-a8ee0608ddcf" + }, + "m_Name": "OutlineMode", + "m_DefaultReferenceName": "Boolean_cb3c0c3f08654b068bea44c4ffb15f4a", + "m_OverrideReferenceName": "_OutlineMode", + "m_GeneratePropertyBlock": true, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.SamplerStateMaterialSlot", + "m_ObjectId": "cb5e9f9567e84f8fa5463efc0e256e19", + "m_Id": 3, + "m_DisplayName": "Sampler", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Sampler", + "m_StageCapability": 3, + "m_BareResource": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BlockNode", + "m_ObjectId": "cb7117ecb1d047a8b2cb00ed552cb181", + "m_Group": { + "m_Id": "" + }, + "m_Name": "SurfaceDescription.Alpha", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -3032.66650390625, + "y": -3029.33349609375, + "width": 200.0, + "height": 41.33349609375 + } + }, + "m_Slots": [ + { + "m_Id": "724e17584e97443e9e285dfa7253c8e3" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SerializedDescriptor": "SurfaceDescription.Alpha" +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "cc88101667c9488f9c5a716e851c1b21", + "m_Id": 3, + "m_DisplayName": "Color0", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Color0", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "cce40479b6284b6fa3174db9f09d0ac9", + "m_Id": 0, + "m_DisplayName": "RGBA", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "RGBA", + "m_StageCapability": 2, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.UVMaterialSlot", + "m_ObjectId": "cd7281fb41aa4e61ac0fdf71d4f4bd46", + "m_Id": 2, + "m_DisplayName": "UV", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "UV", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0 + }, + "m_Labels": [ + "X", + "Y" + ], + "m_Channel": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.SamplerStateMaterialSlot", + "m_ObjectId": "cda5e3b4c1054bf3a65c0b7ec6bc778a", + "m_Id": 3, + "m_DisplayName": "Sampler", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Sampler", + "m_StageCapability": 3, + "m_BareResource": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.SampleTexture2DNode", + "m_ObjectId": "cdddee3a537c464697357f11b966f9b8", + "m_Group": { + "m_Id": "484b51c50485473b819c4f05087b32d7" + }, + "m_Name": "Sample Texture 2D", + "m_DrawState": { + "m_Expanded": false, + "m_Position": { + "serializedVersion": "2", + "x": -4420.0, + "y": -4483.0, + "width": 156.0, + "height": 181.0 + } + }, + "m_Slots": [ + { + "m_Id": "41b9b79b3859472882bcea393703eec0" + }, + { + "m_Id": "c7d4094601ac4bc1aead609c72b1f1c1" + }, + { + "m_Id": "767769f736d5478cba5f10a415e28e7f" + }, + { + "m_Id": "b691728a389a417d9b4f2d02541209c2" + }, + { + "m_Id": "045c4f6b050549c7a0efb208e6349779" + }, + { + "m_Id": "509e6f38505b4b0695b263706a55028f" + }, + { + "m_Id": "204dacb5a95b424facf11cb6f65bd188" + }, + { + "m_Id": "35cbea6373dd4e4f8d0fea36e8add392" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_TextureType": 0, + "m_NormalMapSpace": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "cfaf3f3a5a1146e194cddad30c95aada", + "m_Id": 7, + "m_DisplayName": "A", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.GroupData", + "m_ObjectId": "d0a791a544614667962a9a9a9ce0c68a", + "m_Title": "Screen Space Ratio", + "m_Position": { + "x": -6179.99951171875, + "y": -3422.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicValueMaterialSlot", + "m_ObjectId": "d0b10e52e21941b183f5f635894c76c8", + "m_Id": 0, + "m_DisplayName": "A", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 3, + "m_Value": { + "e00": 0.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 0.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 0.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 0.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "d1a17e42e7a04dc38984e3c01149445b", + "m_Id": 7, + "m_DisplayName": "A", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "d219977210094c0082c517d8dc00c8bb", + "m_Id": 0, + "m_DisplayName": "RGBA", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "RGBA", + "m_StageCapability": 2, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.GroupData", + "m_ObjectId": "d258902c6ec74942afdb9ebf8c1d07f8", + "m_Title": "Generate Normal", + "m_Position": { + "x": -4511.33349609375, + "y": -3999.3330078125 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.UVMaterialSlot", + "m_ObjectId": "d30452ac6b244ecca03df4d7b4de9f81", + "m_Id": 2, + "m_DisplayName": "UV", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "UV", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0 + }, + "m_Labels": [], + "m_Channel": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "d48c3871e3064027a10ae9f4babd3be0", + "m_Id": 0, + "m_DisplayName": "_UnderlaySoftness", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector2MaterialSlot", + "m_ObjectId": "d4954b7bbbb0412cbc997bcbe7dfa808", + "m_Id": 2, + "m_DisplayName": "UV", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "UV", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0 + }, + "m_Labels": [ + "X", + "Y" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "d4df208fc23b42f2b52364124f1b661c", + "m_Group": { + "m_Id": "42cadae0923e4969b50bbc3f78185934" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -5268.0, + "y": -3261.0, + "width": 159.0, + "height": 34.0 + } + }, + "m_Slots": [ + { + "m_Id": "757174b6f25040fdbb20355a21752222" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "74b41464cbed4e9e8e23af5ab9be40cf" + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector3MaterialSlot", + "m_ObjectId": "d5173cc3c6cd4f1998550f3187a3e9c8", + "m_Id": 0, + "m_DisplayName": "Normal", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Normal", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [ + "X", + "Y", + "Z" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "d6a6a119394e4082a11bc024a6e42ef8", + "m_Id": 0, + "m_DisplayName": "Outline Color 2", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector2MaterialSlot", + "m_ObjectId": "d880558893fb442b9320cf55885d1117", + "m_Id": 0, + "m_DisplayName": "_FaceUVSpeed", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0 + }, + "m_Labels": [ + "X", + "Y" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "d8edec16956c4f15b7d51d6ec10753f4", + "m_Id": 2, + "m_DisplayName": "B", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicValueMaterialSlot", + "m_ObjectId": "d9bcb754db834583b6518c5ed5152114", + "m_Id": 0, + "m_DisplayName": "A", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 3, + "m_Value": { + "e00": 0.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 0.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 0.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 0.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "d9dc4839ee2847999110bdb234d6041a", + "m_Id": 1, + "m_DisplayName": "G", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "G", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Texture2DMaterialSlot", + "m_ObjectId": "da7a06d393a44089842070d51d2aa0a6", + "m_Id": 0, + "m_DisplayName": "_MainTex", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_BareResource": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.GroupData", + "m_ObjectId": "daaf032a109749a88c9b8ff8e1f8b541", + "m_Title": "Offset Scale", + "m_Position": { + "x": -5747.99951171875, + "y": -3961.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.UVNode", + "m_ObjectId": "dbcb748279484a4590e53518c49122b8", + "m_Group": { + "m_Id": "013228b0fdf1424097798f0973a9a4fb" + }, + "m_Name": "UV", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4776.00048828125, + "y": -2757.000244140625, + "width": 145.0, + "height": 130.00001525878907 + } + }, + "m_Slots": [ + { + "m_Id": "7a0f504e4175406dbd8134250f4e350b" + } + ], + "synonyms": [], + "m_Precision": 1, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_OutputChannel": 1 +} + +{ + "m_SGVersion": 3, + "m_Type": "UnityEditor.ShaderGraph.Internal.ColorShaderProperty", + "m_ObjectId": "dc75c4e3a1bc4bb0a128086c2b0679a5", + "m_Guid": { + "m_GuidSerialized": "85cd941f-2fd2-43a3-b0fa-9f728bfb4220" + }, + "m_Name": "Face Color", + "m_DefaultReferenceName": "Color_99AFBB3D", + "m_OverrideReferenceName": "_FaceColor", + "m_GeneratePropertyBlock": true, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": { + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "m_ColorMode": 1 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector2MaterialSlot", + "m_ObjectId": "de0c6f7f7af94defa6c3dbc6433de9d4", + "m_Id": 6, + "m_DisplayName": "RG", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "RG", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "deac82280a2b43078e0e40863e2d974c", + "m_Id": 4, + "m_DisplayName": "A", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Texture2DMaterialSlot", + "m_ObjectId": "def8e0b9d8384982bc5b4c32d877e458", + "m_Id": 0, + "m_DisplayName": "Outline Texture", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_BareResource": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.SubtractNode", + "m_ObjectId": "dff7a66b353a4023b29c9d937da77960", + "m_Group": { + "m_Id": "484b51c50485473b819c4f05087b32d7" + }, + "m_Name": "Subtract", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4602.0, + "y": -4298.0, + "width": 130.0, + "height": 118.0 + } + }, + "m_Slots": [ + { + "m_Id": "7b8a19bd115e4167a25b59cb3218a817" + }, + { + "m_Id": "0b57f2d35157477ab2b29a5aac14ae8b" + }, + { + "m_Id": "e9e06fcb161e44ba8cc9f6f60264df78" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.UVMaterialSlot", + "m_ObjectId": "e141833aa78b4fd59ecad949beb43a78", + "m_Id": 2, + "m_DisplayName": "UV", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "UV", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0 + }, + "m_Labels": [ + "X", + "Y" + ], + "m_Channel": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "e2d28f29bbac4983a401574480b5ca28", + "m_Id": 1, + "m_DisplayName": "R", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "R", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.NormalMaterialSlot", + "m_ObjectId": "e386b183a18245a796b024022f7f3074", + "m_Id": 0, + "m_DisplayName": "Normal (Object Space)", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "NormalOS", + "m_StageCapability": 2, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [ + "X", + "Y", + "Z" + ], + "m_Space": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "e444f2c81d1e48329fa2c91005277e8d", + "m_Id": 1, + "m_DisplayName": "R", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "R", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector2MaterialSlot", + "m_ObjectId": "e495a9f7a11f4eb89334e83be154ceb9", + "m_Id": 2, + "m_DisplayName": "UV", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "UV", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0 + }, + "m_Labels": [ + "X", + "Y" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "e51a636b2621440eb94cc802c1cf4bfc", + "m_Id": 2, + "m_DisplayName": "Height", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Height", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BlockNode", + "m_ObjectId": "e591df3a1eb94e259b762f2830b407e2", + "m_Group": { + "m_Id": "" + }, + "m_Name": "SurfaceDescription.Emission", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": 0.0, + "y": 0.0, + "width": 0.0, + "height": 0.0 + } + }, + "m_Slots": [ + { + "m_Id": "4590bfa2a0664b65b6f073bae33a071f" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SerializedDescriptor": "SurfaceDescription.Emission" +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "e6e80c6b0db545cda26b079a9a78fbb3", + "m_Id": 5, + "m_DisplayName": "G", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "G", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.CustomFunctionNode", + "m_ObjectId": "e818605f8f5a4f01bf61caaa33693581", + "m_Group": { + "m_Id": "42cadae0923e4969b50bbc3f78185934" + }, + "m_Name": "ComputeSDF44 (Custom Function)", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4144.0, + "y": -3369.0, + "width": 244.0, + "height": 214.0 + } + }, + "m_Slots": [ + { + "m_Id": "641eda269d7b4da9acb65f8d50035ea9" + }, + { + "m_Id": "f6823778a3cf42d5bbe8a83e5f9c9fa3" + }, + { + "m_Id": "9c26fdddba244d36a854298c00473247" + }, + { + "m_Id": "f684c5678e9e4f078157a3ab7ef5057b" + }, + { + "m_Id": "14ad19bf20a140dd88d58452d7df688b" + }, + { + "m_Id": "215a82c127204988b751de7d3a39b955" + }, + { + "m_Id": "c478c32c45884c57a62f7b2aa8ddc3b0" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SourceType": 0, + "m_FunctionName": "ComputeSDF44", + "m_FunctionSource": "96de908384869cd409c75efa351d5edf", + "m_FunctionBody": "Enter function body here..." +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "e9e06fcb161e44ba8cc9f6f60264df78", + "m_Id": 2, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "ebbd94a7102a4457a48ac492de3bff14", + "m_Id": 5, + "m_DisplayName": "G", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "G", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "ebd6d75abcb84108bcadbfe7ee5f6244", + "m_Id": 7, + "m_DisplayName": "TextureHeight", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "TextureHeight", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "ec184d6d9fb2494897774c9e7d279e6d", + "m_Group": { + "m_Id": "013228b0fdf1424097798f0973a9a4fb" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4778.00048828125, + "y": -2626.0, + "width": 145.0, + "height": 34.0 + } + }, + "m_Slots": [ + { + "m_Id": "ca2a1083dc014f39ab8af0cdf140866b" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "07946387933e416db576b677f0711e5f" + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.SubtractNode", + "m_ObjectId": "ec1f2e8bc9fd4ae38b133c60ee6c49b8", + "m_Group": { + "m_Id": "42cadae0923e4969b50bbc3f78185934" + }, + "m_Name": "Subtract", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4957.99951171875, + "y": -3204.0, + "width": 130.0, + "height": 118.0 + } + }, + "m_Slots": [ + { + "m_Id": "748c31bbcecc4b30bec2e42c0612175b" + }, + { + "m_Id": "4bda5c294e1949138d033640e1d385b4" + }, + { + "m_Id": "4e64dac49ddc47c3b5b1e27b17a08304" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.Internal.Vector4ShaderProperty", + "m_ObjectId": "ec79eb447dfd47a9b3380344c6a60f43", + "m_Guid": { + "m_GuidSerialized": "54c77f8b-0534-4b35-a3f0-83ab2ebe6c1f" + }, + "m_Name": "_OutlineTex_ST", + "m_DefaultReferenceName": "Vector4_1774DE83", + "m_OverrideReferenceName": "_OutlineTex_ST", + "m_GeneratePropertyBlock": true, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": { + "x": 1.0, + "y": 1.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.GroupData", + "m_ObjectId": "ecf16c34d46f4502ac601f0c38c7576b", + "m_Title": "Vertex Color", + "m_Position": { + "x": -3448.000244140625, + "y": -3579.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "ed1d1f1613334c3bb904dd08161cd7e5", + "m_Id": 0, + "m_DisplayName": "_GradientScale", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "ed6c215a65584deeaefad1d2c7743044", + "m_Id": 4, + "m_DisplayName": "RGBA", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "RGBA", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector3MaterialSlot", + "m_ObjectId": "edbee7a8952b46529ac5ad0365775774", + "m_Id": 5, + "m_DisplayName": "RGB", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "RGB", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.ColorRGBMaterialSlot", + "m_ObjectId": "ef0b93f78372439696f50711eaf57d90", + "m_Id": 0, + "m_DisplayName": "Base Color", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "BaseColor", + "m_StageCapability": 2, + "m_Value": { + "x": 0.7353569269180298, + "y": 0.7353569269180298, + "z": 0.7353569269180298 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [ + "X", + "Y", + "Z" + ], + "m_ColorMode": 0, + "m_DefaultColor": { + "r": 0.5, + "g": 0.5, + "b": 0.5, + "a": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector2MaterialSlot", + "m_ObjectId": "ef9738ec7e894772a14e9dce441c16c6", + "m_Id": 2, + "m_DisplayName": "UV", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "UV", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0 + }, + "m_Labels": [ + "X", + "Y" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.SamplerStateMaterialSlot", + "m_ObjectId": "f01d52cdcb1647aab35782b4af535efd", + "m_Id": 3, + "m_DisplayName": "Sampler", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Sampler", + "m_StageCapability": 3, + "m_BareResource": false +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.CustomFunctionNode", + "m_ObjectId": "f23a8b2b7c85478388ff7a8c8a6de740", + "m_Group": { + "m_Id": "42cadae0923e4969b50bbc3f78185934" + }, + "m_Name": "Layer4 (Custom Function)", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -3849.999755859375, + "y": -3286.0, + "width": 193.0, + "height": 189.99998474121095 + } + }, + "m_Slots": [ + { + "m_Id": "0fac35636fca4474a6afaefc3c757775" + }, + { + "m_Id": "cc88101667c9488f9c5a716e851c1b21" + }, + { + "m_Id": "68ec7c31365549d6a8ce883edfc02de2" + }, + { + "m_Id": "02559cbe5ad441a3904ccb75ded2b2c5" + }, + { + "m_Id": "34a67e0fef884f9399e674d9eeaf720c" + }, + { + "m_Id": "3802c81c3be24823aa1d7c9997a33c29" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SourceType": 0, + "m_FunctionName": "Layer4", + "m_FunctionSource": "96de908384869cd409c75efa351d5edf", + "m_FunctionBody": "Enter function body here..." +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "f2903158b3624759bca1fcd843698078", + "m_Id": 1, + "m_DisplayName": "B", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 3, + "m_Value": { + "x": 2.0, + "y": 2.0, + "z": 2.0, + "w": 2.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicValueMaterialSlot", + "m_ObjectId": "f2a351a5375c441b8d9ab7e2c9545a77", + "m_Id": 1, + "m_DisplayName": "B", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 3, + "m_Value": { + "e00": 2.0, + "e01": 2.0, + "e02": 2.0, + "e03": 2.0, + "e10": 2.0, + "e11": 2.0, + "e12": 2.0, + "e13": 2.0, + "e20": 2.0, + "e21": 2.0, + "e22": 2.0, + "e23": 2.0, + "e30": 2.0, + "e31": 2.0, + "e32": 2.0, + "e33": 2.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Texture2DPropertiesNode", + "m_ObjectId": "f383b24f0bc6434dafe44b3e3d338a63", + "m_Group": { + "m_Id": "d0a791a544614667962a9a9a9ce0c68a" + }, + "m_Name": "Texel Size", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -6012.99951171875, + "y": -3209.0, + "width": 183.99998474121095, + "height": 100.99999237060547 + } + }, + "m_Slots": [ + { + "m_Id": "fb5e1e2a67c14602808358686bb75091" + }, + { + "m_Id": "712da461f71a454db59d349f752d41ee" + }, + { + "m_Id": "b000f852aa984e9dae25b125a4607f4e" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "f3d31c1f18d8491a8ecf5cbc37e4b7db", + "m_Group": { + "m_Id": "42cadae0923e4969b50bbc3f78185934" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4321.0, + "y": -3281.000244140625, + "width": 153.00001525878907, + "height": 34.0 + } + }, + "m_Slots": [ + { + "m_Id": "ed1d1f1613334c3bb904dd08161cd7e5" + } + ], + "synonyms": [], + "m_Precision": 1, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "a6bbb32e8d884be9bb36db91fe4b81b1" + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "f42ad06b3c6a45d3ab33de904c063412", + "m_Id": 3, + "m_DisplayName": "A", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "f48f04ad45d046a8b88e71731ed506e7", + "m_Id": 4, + "m_DisplayName": "R", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "R", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BlockNode", + "m_ObjectId": "f4ecc442a2d246759f7c2c0412953d28", + "m_Group": { + "m_Id": "" + }, + "m_Name": "VertexDescription.Normal", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": 0.0, + "y": 0.0, + "width": 0.0, + "height": 0.0 + } + }, + "m_Slots": [ + { + "m_Id": "a3f8b6e8ae7f48e2989a029904401502" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SerializedDescriptor": "VertexDescription.Normal" +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "f6823778a3cf42d5bbe8a83e5f9c9fa3", + "m_Id": 1, + "m_DisplayName": "SD", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "SD", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "f684c5678e9e4f078157a3ab7ef5057b", + "m_Id": 4, + "m_DisplayName": "Isoperimeter", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Isoperimeter", + "m_StageCapability": 3, + "m_Value": { + "x": 3.0, + "y": 2.0, + "z": 1.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.SampleTexture2DNode", + "m_ObjectId": "f814deb543c24fbbafbcdb5071d96022", + "m_Group": { + "m_Id": "42cadae0923e4969b50bbc3f78185934" + }, + "m_Name": "Sample Texture 2D", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4600.0, + "y": -3245.0, + "width": 183.99998474121095, + "height": 253.0 + } + }, + "m_Slots": [ + { + "m_Id": "abd59150589b436cadf8c9e6f43ccb8e" + }, + { + "m_Id": "7acfafd73b8c4dfab8c55c18a887e087" + }, + { + "m_Id": "928621a3ca2d41c89a10336bbbc81ddc" + }, + { + "m_Id": "b7f9ac55517141868bfb9d2ad6429792" + }, + { + "m_Id": "09b1b86c1c074337a4c439d3a308dd2e" + }, + { + "m_Id": "1f247658c7ba45fb93c41f51e21acb0d" + }, + { + "m_Id": "d30452ac6b244ecca03df4d7b4de9f81" + }, + { + "m_Id": "215b30ae27784ec3a13360a9029af283" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_TextureType": 0, + "m_NormalMapSpace": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "f864c900600e427ba7793f00c715e971", + "m_Id": 0, + "m_DisplayName": "Outline Width", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicValueMaterialSlot", + "m_ObjectId": "fa6de3be9f5b4411b5081b49e645f424", + "m_Id": 1, + "m_DisplayName": "B", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 3, + "m_Value": { + "e00": 2.0, + "e01": 2.0, + "e02": 2.0, + "e03": 2.0, + "e10": 2.0, + "e11": 2.0, + "e12": 2.0, + "e13": 2.0, + "e20": 2.0, + "e21": 2.0, + "e22": 2.0, + "e23": 2.0, + "e30": 2.0, + "e31": 2.0, + "e32": 2.0, + "e33": 2.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DivideNode", + "m_ObjectId": "faace8101df943d8956faa31728cb004", + "m_Group": { + "m_Id": "daaf032a109749a88c9b8ff8e1f8b541" + }, + "m_Name": "Divide", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -5254.99951171875, + "y": -3891.0, + "width": 130.0, + "height": 118.0 + } + }, + "m_Slots": [ + { + "m_Id": "77e28f3e930b4c249145630ec961af95" + }, + { + "m_Id": "f2903158b3624759bca1fcd843698078" + }, + { + "m_Id": "30ca940fe2794c949f2a1d4d2caaa446" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "facc84930f544fd7a0205a6176b18ac0", + "m_Id": 2, + "m_DisplayName": "RGBA", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "RGBA", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Texture2DInputMaterialSlot", + "m_ObjectId": "fb15d0ba56d54a6192f11e107aeb5fa8", + "m_Id": 1, + "m_DisplayName": "Texture", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Texture", + "m_StageCapability": 3, + "m_BareResource": false, + "m_Texture": { + "m_SerializedTexture": "{\"texture\":{\"instanceID\":0}}", + "m_Guid": "" + }, + "m_DefaultType": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "fb5e1e2a67c14602808358686bb75091", + "m_Id": 0, + "m_DisplayName": "Width", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Width", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "fc2e62201c5847e798fd939314413fcd", + "m_Id": 4, + "m_DisplayName": "RGBA", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "RGBA", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicValueMaterialSlot", + "m_ObjectId": "fd0b096ed5b74f9e9ec51327be200731", + "m_Id": 2, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "e00": 0.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 0.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 0.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 0.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.SampleTexture2DNode", + "m_ObjectId": "fdb77c3e92ee497b88ca5dc46dc45350", + "m_Group": { + "m_Id": "98934a69591249d5b8b92b39045359a3" + }, + "m_Name": "Sample Texture 2D", + "m_DrawState": { + "m_Expanded": false, + "m_Position": { + "serializedVersion": "2", + "x": -4208.0, + "y": -2371.0, + "width": 180.0, + "height": 180.0 + } + }, + "m_Slots": [ + { + "m_Id": "4328cdbf78b94c038fd614c59bfe1cac" + }, + { + "m_Id": "04dfcc9ff13a4bf282ed46faec39d15c" + }, + { + "m_Id": "71dd947935b64ce38f0d25406dde447b" + }, + { + "m_Id": "61a6ac5f29344d109411f26850ab0a96" + }, + { + "m_Id": "44806230fa384c1e95f9c5918a14f056" + }, + { + "m_Id": "4eb3c00a1ca44e10be833b7ca61ff059" + }, + { + "m_Id": "57abc172afd449e2a4d567f93432507b" + }, + { + "m_Id": "cda5e3b4c1054bf3a65c0b7ec6bc778a" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_TextureType": 0, + "m_NormalMapSpace": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector3MaterialSlot", + "m_ObjectId": "fe11fa80cc1847a5a37f6757d521cf25", + "m_Id": 5, + "m_DisplayName": "RGB", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "RGB", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [] +} + diff --git a/Assets/Resources/TextMesh Pro/Shaders/TMP_SDF-URP Lit.shadergraph.meta b/Assets/Resources/TextMesh Pro/Shaders/TMP_SDF-URP Lit.shadergraph.meta new file mode 100644 index 0000000..54c945e --- /dev/null +++ b/Assets/Resources/TextMesh Pro/Shaders/TMP_SDF-URP Lit.shadergraph.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: a3d800b099a06e0478fb790c5e79057a +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: 625f186215c104763be7675aa2d941aa, type: 3} diff --git a/Assets/Resources/TextMesh Pro/Shaders/TMP_SDF-URP Unlit.shadergraph b/Assets/Resources/TextMesh Pro/Shaders/TMP_SDF-URP Unlit.shadergraph new file mode 100644 index 0000000..d7bc5b0 --- /dev/null +++ b/Assets/Resources/TextMesh Pro/Shaders/TMP_SDF-URP Unlit.shadergraph @@ -0,0 +1,11160 @@ +{ + "m_SGVersion": 2, + "m_Type": "UnityEditor.ShaderGraph.GraphData", + "m_ObjectId": "386c36a1c4c34ea29deb680fb82cfe8b", + "m_Properties": [ + { + "m_Id": "dc75c4e3a1bc4bb0a128086c2b0679a5" + }, + { + "m_Id": "867a4ae13c0d4a028c71bc1063824c14" + }, + { + "m_Id": "22b7f3c2bb7b48c0a7fdeb50e33e7d5e" + }, + { + "m_Id": "53073e5ea924459fa6681a4943e9f947" + }, + { + "m_Id": "7a046f410ce64aa88438b0bfd412c045" + }, + { + "m_Id": "636180f6e0504f2baaa5cc086980cb47" + }, + { + "m_Id": "74b41464cbed4e9e8e23af5ab9be40cf" + }, + { + "m_Id": "8ed907a2cc7949b68a283ae243ea1977" + }, + { + "m_Id": "cb3c0c3f08654b068bea44c4ffb15f4a" + }, + { + "m_Id": "0580d4b7e3a049049569f4508643a724" + }, + { + "m_Id": "c9ec735d1a1046769e5601b2c97c849a" + }, + { + "m_Id": "2d0a269511e34bd1ba9056d2c939dff2" + }, + { + "m_Id": "07946387933e416db576b677f0711e5f" + }, + { + "m_Id": "46fbf3eeb0ea4470869cba7443249295" + }, + { + "m_Id": "ec79eb447dfd47a9b3380344c6a60f43" + }, + { + "m_Id": "3fdf4b7bc5d4426492dcc057603ef4a6" + }, + { + "m_Id": "8cf8aae64c1d443f9303126886b40f17" + }, + { + "m_Id": "49e7c3ad55ce458797f0e60c950cb965" + }, + { + "m_Id": "81e8ed0534534674a74263e6161a2a1a" + }, + { + "m_Id": "952d0fa5cd744df0b434cd38e9a90b93" + }, + { + "m_Id": "21a7a380e66d42e780e2a2a1baa630d5" + }, + { + "m_Id": "2c10b97b92c947ceb307a93759c0228b" + }, + { + "m_Id": "1be90d4f96a841748b0c95219b12ad27" + }, + { + "m_Id": "5fbe253f3e444f2aa8ac717f9c856619" + }, + { + "m_Id": "5bd258837c514ff7ab0bf7027e762c18" + }, + { + "m_Id": "998db5e5901e45b29040eb2099370071" + }, + { + "m_Id": "a6c38edd2e8743a9b057ba8452b9f129" + }, + { + "m_Id": "82af2db1018543d7832af96c1cfc981f" + }, + { + "m_Id": "3ec4797e381747829ef4712c85fcf7a1" + }, + { + "m_Id": "b0b352c4503a43d083a64e57352b29a0" + }, + { + "m_Id": "424dbeeb009344efa29c304c4979e3d6" + }, + { + "m_Id": "05805bc6fcc941fd889922555c6c86d7" + }, + { + "m_Id": "a4ad98d8828c424384229c344ebe2ed0" + }, + { + "m_Id": "3e372195f4bd4845852a37839e5b602d" + }, + { + "m_Id": "a6bbb32e8d884be9bb36db91fe4b81b1" + } + ], + "m_Keywords": [], + "m_Nodes": [ + { + "m_Id": "b1188549725543d485436c2e921ffbb2" + }, + { + "m_Id": "4488af8ff6a7421298a7e827f567263b" + }, + { + "m_Id": "7e0fadb2533f496192c1ad3e78642010" + }, + { + "m_Id": "aa87c72ac0e64469acc34f936f00b3d0" + }, + { + "m_Id": "105b1ed1aa714e41bbe1ef5472bdb11f" + }, + { + "m_Id": "150533bad8e2424aaa2c74e253af8592" + }, + { + "m_Id": "1c4df61c2fea404eb3b87b270d7c59bc" + }, + { + "m_Id": "8135ca333f8f4ea78163743e6ec1f55c" + }, + { + "m_Id": "36f1b4d96f2941c39e5cd95d9c1d2ce6" + }, + { + "m_Id": "9c228fac287d446296b91a4acf5cec59" + }, + { + "m_Id": "52798bdb86f6400e86489a7a368e9f8b" + }, + { + "m_Id": "f383b24f0bc6434dafe44b3e3d338a63" + }, + { + "m_Id": "85a1ad8e741e41759002e8cdc8cd0b96" + }, + { + "m_Id": "f3d31c1f18d8491a8ecf5cbc37e4b7db" + }, + { + "m_Id": "f23a8b2b7c85478388ff7a8c8a6de740" + }, + { + "m_Id": "e818605f8f5a4f01bf61caaa33693581" + }, + { + "m_Id": "85b5940eb77e4625812ded7215bab8d7" + }, + { + "m_Id": "cdddee3a537c464697357f11b966f9b8" + }, + { + "m_Id": "88253223d2c34ecfab92b0c344048f94" + }, + { + "m_Id": "c7ddee91dc5b48dc828309c77fdb0b88" + }, + { + "m_Id": "1e12726617b24675958e942eb62e4b09" + }, + { + "m_Id": "2ac79705aa9e415dbb74ec215233fd1b" + }, + { + "m_Id": "44317f2e371447e2a8d894f8a021a235" + }, + { + "m_Id": "7984fd094e1147bdabb4e26fbd3d31c8" + }, + { + "m_Id": "91890fe48ebe4717aea61ecaf3ad4861" + }, + { + "m_Id": "19075add867e4757b9520d18fe8de1d0" + }, + { + "m_Id": "fdb77c3e92ee497b88ca5dc46dc45350" + }, + { + "m_Id": "c234e5216678436195ee1a5914bc79da" + }, + { + "m_Id": "4648b46ad29a4008a80de4f8a5a5b813" + }, + { + "m_Id": "59bd90a849624124bae6464ee3669aa6" + }, + { + "m_Id": "a535f3bcbeb14622bb177eb6f46e76f4" + }, + { + "m_Id": "9e87ce9607e14015a3790c528ca5dfda" + }, + { + "m_Id": "285f6a9863d54ed2a8150727ad749456" + }, + { + "m_Id": "b163c9f1666644b0bba62cf0e12df7bc" + }, + { + "m_Id": "a455bd79094c4413a7b7dd80ca8b9368" + }, + { + "m_Id": "dbcb748279484a4590e53518c49122b8" + }, + { + "m_Id": "04dc152dd2ba4d519391577eb1156235" + }, + { + "m_Id": "9f0de188085746d5a19073da1de85ddb" + }, + { + "m_Id": "ec184d6d9fb2494897774c9e7d279e6d" + }, + { + "m_Id": "95928bcb6a284b8d88105a84c2e1d3ce" + }, + { + "m_Id": "4f194ff591484e908fc2bcdacbcf2570" + }, + { + "m_Id": "6e8946a245e842b38231d4a241bfb3ef" + }, + { + "m_Id": "cb7117ecb1d047a8b2cb00ed552cb181" + }, + { + "m_Id": "3c50439118b2496f9e390021b0964606" + }, + { + "m_Id": "3e231021af7b47ba97f2871e7f25d0fe" + }, + { + "m_Id": "aa3e347d733e48f7b65d8a8847370eec" + }, + { + "m_Id": "2a552a0b828f457c911aa19561e410ae" + }, + { + "m_Id": "acd0cd5a177f4a97bf23db7219305e3f" + }, + { + "m_Id": "51378bae98a94c309785d14cd5cbb453" + }, + { + "m_Id": "9e6e50a71d9843b49b62ebe1cf7d3d59" + }, + { + "m_Id": "7444469eb9884253819add9ef96baa25" + }, + { + "m_Id": "67a519f507384ff1861df5d8d5b486be" + }, + { + "m_Id": "48390d02257d41bf98eace1deaa4c539" + }, + { + "m_Id": "f4ecc442a2d246759f7c2c0412953d28" + }, + { + "m_Id": "7f2e6b5f15364ed9835d67d0cf4f8f65" + }, + { + "m_Id": "aca823a8188948c782eddaf0f45e1868" + }, + { + "m_Id": "7d78a616c2754cc28d1f32cf66ade611" + }, + { + "m_Id": "163beb4431c34f538340bc0af0991e6f" + }, + { + "m_Id": "39f2f84f30304d859fb07569e2695f60" + }, + { + "m_Id": "42a586e4f6ec40eeaba891b7fd133864" + }, + { + "m_Id": "4abff6ff92fa4a05b203f10580988335" + }, + { + "m_Id": "319916a5921343f7b7eef0e50dc93def" + }, + { + "m_Id": "f814deb543c24fbbafbcdb5071d96022" + }, + { + "m_Id": "65c8e64a7535466e933eed08a2f77532" + }, + { + "m_Id": "63c7cd57fc3c45a9a97b514fdae32693" + }, + { + "m_Id": "d4df208fc23b42f2b52364124f1b661c" + }, + { + "m_Id": "9d3c3383d5934a17bf9efbb7fd9e9043" + }, + { + "m_Id": "aef5c44f84e04c3185e0b93e95e34204" + }, + { + "m_Id": "c9d7f0dbae7d422985a1cc87c025e76b" + }, + { + "m_Id": "faace8101df943d8956faa31728cb004" + }, + { + "m_Id": "007c75c776ac4f1babe9cd7ae1fc4f14" + }, + { + "m_Id": "b571db753a1948d5a6f1de4e7d0c7238" + }, + { + "m_Id": "9147636b0cfa466a9b37a013d8f693bf" + }, + { + "m_Id": "bc9afcb18afa4ccc82d2cdc34d3f4641" + }, + { + "m_Id": "b4a40cb6acd441acb83cfe0240bf910d" + }, + { + "m_Id": "56c25395796e4d2fbe5c892d428d1620" + }, + { + "m_Id": "6b2f65c1463f4f7bad16c54a95d2fe75" + }, + { + "m_Id": "109f638d1f9b49d4991d6d21a86d4eb7" + }, + { + "m_Id": "dff7a66b353a4023b29c9d937da77960" + }, + { + "m_Id": "7a80e8839f0e4a1d9a6c0814f8793ee6" + }, + { + "m_Id": "7d7696aa6d184b4fb9c316a9dec37aee" + }, + { + "m_Id": "ec1f2e8bc9fd4ae38b133c60ee6c49b8" + }, + { + "m_Id": "2db15d90c2204143b225ec4ef08d0755" + } + ], + "m_GroupDatas": [ + { + "m_Id": "484b51c50485473b819c4f05087b32d7" + }, + { + "m_Id": "d0a791a544614667962a9a9a9ce0c68a" + }, + { + "m_Id": "42cadae0923e4969b50bbc3f78185934" + }, + { + "m_Id": "ecf16c34d46f4502ac601f0c38c7576b" + }, + { + "m_Id": "98934a69591249d5b8b92b39045359a3" + }, + { + "m_Id": "013228b0fdf1424097798f0973a9a4fb" + }, + { + "m_Id": "d258902c6ec74942afdb9ebf8c1d07f8" + }, + { + "m_Id": "daaf032a109749a88c9b8ff8e1f8b541" + } + ], + "m_StickyNoteDatas": [], + "m_Edges": [ + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "007c75c776ac4f1babe9cd7ae1fc4f14" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "b571db753a1948d5a6f1de4e7d0c7238" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "04dc152dd2ba4d519391577eb1156235" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "b163c9f1666644b0bba62cf0e12df7bc" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "105b1ed1aa714e41bbe1ef5472bdb11f" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "b4a40cb6acd441acb83cfe0240bf910d" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "109f638d1f9b49d4991d6d21a86d4eb7" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "ec1f2e8bc9fd4ae38b133c60ee6c49b8" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "150533bad8e2424aaa2c74e253af8592" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "319916a5921343f7b7eef0e50dc93def" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "150533bad8e2424aaa2c74e253af8592" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "65c8e64a7535466e933eed08a2f77532" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "150533bad8e2424aaa2c74e253af8592" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "9c228fac287d446296b91a4acf5cec59" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "150533bad8e2424aaa2c74e253af8592" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "f814deb543c24fbbafbcdb5071d96022" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "163beb4431c34f538340bc0af0991e6f" + }, + "m_SlotId": 4 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "7984fd094e1147bdabb4e26fbd3d31c8" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "19075add867e4757b9520d18fe8de1d0" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "e818605f8f5a4f01bf61caaa33693581" + }, + "m_SlotId": 5 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "1c4df61c2fea404eb3b87b270d7c59bc" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "e818605f8f5a4f01bf61caaa33693581" + }, + "m_SlotId": 4 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "1e12726617b24675958e942eb62e4b09" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "dff7a66b353a4023b29c9d937da77960" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "285f6a9863d54ed2a8150727ad749456" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "59bd90a849624124bae6464ee3669aa6" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "2a552a0b828f457c911aa19561e410ae" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "51378bae98a94c309785d14cd5cbb453" + }, + "m_SlotId": 6 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "2ac79705aa9e415dbb74ec215233fd1b" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "7984fd094e1147bdabb4e26fbd3d31c8" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "2db15d90c2204143b225ec4ef08d0755" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "fdb77c3e92ee497b88ca5dc46dc45350" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "319916a5921343f7b7eef0e50dc93def" + }, + "m_SlotId": 7 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "4abff6ff92fa4a05b203f10580988335" + }, + "m_SlotId": 2 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "36f1b4d96f2941c39e5cd95d9c1d2ce6" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "85a1ad8e741e41759002e8cdc8cd0b96" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "39f2f84f30304d859fb07569e2695f60" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "163beb4431c34f538340bc0af0991e6f" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "3e231021af7b47ba97f2871e7f25d0fe" + }, + "m_SlotId": 5 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "6e8946a245e842b38231d4a241bfb3ef" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "42a586e4f6ec40eeaba891b7fd133864" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "cdddee3a537c464697357f11b966f9b8" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "44317f2e371447e2a8d894f8a021a235" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "2ac79705aa9e415dbb74ec215233fd1b" + }, + "m_SlotId": 3 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "4488af8ff6a7421298a7e827f567263b" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "44317f2e371447e2a8d894f8a021a235" + }, + "m_SlotId": 3 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "4648b46ad29a4008a80de4f8a5a5b813" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "c234e5216678436195ee1a5914bc79da" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "4abff6ff92fa4a05b203f10580988335" + }, + "m_SlotId": 4 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "e818605f8f5a4f01bf61caaa33693581" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "4f194ff591484e908fc2bcdacbcf2570" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "9f0de188085746d5a19073da1de85ddb" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "51378bae98a94c309785d14cd5cbb453" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "aa3e347d733e48f7b65d8a8847370eec" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "51378bae98a94c309785d14cd5cbb453" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "aca823a8188948c782eddaf0f45e1868" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "52798bdb86f6400e86489a7a368e9f8b" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "f383b24f0bc6434dafe44b3e3d338a63" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "56c25395796e4d2fbe5c892d428d1620" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "7a80e8839f0e4a1d9a6c0814f8793ee6" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "59bd90a849624124bae6464ee3669aa6" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "f23a8b2b7c85478388ff7a8c8a6de740" + }, + "m_SlotId": 4 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "63c7cd57fc3c45a9a97b514fdae32693" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "56c25395796e4d2fbe5c892d428d1620" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "65c8e64a7535466e933eed08a2f77532" + }, + "m_SlotId": 7 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "4abff6ff92fa4a05b203f10580988335" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "67a519f507384ff1861df5d8d5b486be" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "51378bae98a94c309785d14cd5cbb453" + }, + "m_SlotId": 4 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "6b2f65c1463f4f7bad16c54a95d2fe75" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "7d7696aa6d184b4fb9c316a9dec37aee" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "7444469eb9884253819add9ef96baa25" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "51378bae98a94c309785d14cd5cbb453" + }, + "m_SlotId": 2 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "7984fd094e1147bdabb4e26fbd3d31c8" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "91890fe48ebe4717aea61ecaf3ad4861" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "7a80e8839f0e4a1d9a6c0814f8793ee6" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "65c8e64a7535466e933eed08a2f77532" + }, + "m_SlotId": 2 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "7d7696aa6d184b4fb9c316a9dec37aee" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "319916a5921343f7b7eef0e50dc93def" + }, + "m_SlotId": 2 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "7d78a616c2754cc28d1f32cf66ade611" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "f23a8b2b7c85478388ff7a8c8a6de740" + }, + "m_SlotId": 3 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "7e0fadb2533f496192c1ad3e78642010" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "88253223d2c34ecfab92b0c344048f94" + }, + "m_SlotId": 5 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "8135ca333f8f4ea78163743e6ec1f55c" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "f23a8b2b7c85478388ff7a8c8a6de740" + }, + "m_SlotId": 5 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "85a1ad8e741e41759002e8cdc8cd0b96" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "88253223d2c34ecfab92b0c344048f94" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "85a1ad8e741e41759002e8cdc8cd0b96" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "e818605f8f5a4f01bf61caaa33693581" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "85b5940eb77e4625812ded7215bab8d7" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "f23a8b2b7c85478388ff7a8c8a6de740" + }, + "m_SlotId": 6 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "88253223d2c34ecfab92b0c344048f94" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "44317f2e371447e2a8d894f8a021a235" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "9147636b0cfa466a9b37a013d8f693bf" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "faace8101df943d8956faa31728cb004" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "91890fe48ebe4717aea61ecaf3ad4861" + }, + "m_SlotId": 1 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "3e231021af7b47ba97f2871e7f25d0fe" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "91890fe48ebe4717aea61ecaf3ad4861" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "3e231021af7b47ba97f2871e7f25d0fe" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "91890fe48ebe4717aea61ecaf3ad4861" + }, + "m_SlotId": 3 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "3e231021af7b47ba97f2871e7f25d0fe" + }, + "m_SlotId": 2 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "91890fe48ebe4717aea61ecaf3ad4861" + }, + "m_SlotId": 4 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "cb7117ecb1d047a8b2cb00ed552cb181" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "95928bcb6a284b8d88105a84c2e1d3ce" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "a455bd79094c4413a7b7dd80ca8b9368" + }, + "m_SlotId": 4 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "9c228fac287d446296b91a4acf5cec59" + }, + "m_SlotId": 7 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "4abff6ff92fa4a05b203f10580988335" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "9d3c3383d5934a17bf9efbb7fd9e9043" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "7a80e8839f0e4a1d9a6c0814f8793ee6" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "9d3c3383d5934a17bf9efbb7fd9e9043" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "7d7696aa6d184b4fb9c316a9dec37aee" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "9d3c3383d5934a17bf9efbb7fd9e9043" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "ec1f2e8bc9fd4ae38b133c60ee6c49b8" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "9e6e50a71d9843b49b62ebe1cf7d3d59" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "acd0cd5a177f4a97bf23db7219305e3f" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "9e87ce9607e14015a3790c528ca5dfda" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "c234e5216678436195ee1a5914bc79da" + }, + "m_SlotId": 4 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "9f0de188085746d5a19073da1de85ddb" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "7d78a616c2754cc28d1f32cf66ade611" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "a455bd79094c4413a7b7dd80ca8b9368" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "b163c9f1666644b0bba62cf0e12df7bc" + }, + "m_SlotId": 2 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "a535f3bcbeb14622bb177eb6f46e76f4" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "c234e5216678436195ee1a5914bc79da" + }, + "m_SlotId": 3 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "aa3e347d733e48f7b65d8a8847370eec" + }, + "m_SlotId": 1 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "2ac79705aa9e415dbb74ec215233fd1b" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "aa87c72ac0e64469acc34f936f00b3d0" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "88253223d2c34ecfab92b0c344048f94" + }, + "m_SlotId": 4 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "acd0cd5a177f4a97bf23db7219305e3f" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "51378bae98a94c309785d14cd5cbb453" + }, + "m_SlotId": 5 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "acd0cd5a177f4a97bf23db7219305e3f" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "51378bae98a94c309785d14cd5cbb453" + }, + "m_SlotId": 7 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "aef5c44f84e04c3185e0b93e95e34204" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "109f638d1f9b49d4991d6d21a86d4eb7" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "b1188549725543d485436c2e921ffbb2" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "7d78a616c2754cc28d1f32cf66ade611" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "b163c9f1666644b0bba62cf0e12df7bc" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "9f0de188085746d5a19073da1de85ddb" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "b4a40cb6acd441acb83cfe0240bf910d" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "dff7a66b353a4023b29c9d937da77960" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "b571db753a1948d5a6f1de4e7d0c7238" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "bc9afcb18afa4ccc82d2cdc34d3f4641" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "b571db753a1948d5a6f1de4e7d0c7238" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "bc9afcb18afa4ccc82d2cdc34d3f4641" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "bc9afcb18afa4ccc82d2cdc34d3f4641" + }, + "m_SlotId": 6 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "faace8101df943d8956faa31728cb004" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "c234e5216678436195ee1a5914bc79da" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "fdb77c3e92ee497b88ca5dc46dc45350" + }, + "m_SlotId": 2 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "c7ddee91dc5b48dc828309c77fdb0b88" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "88253223d2c34ecfab92b0c344048f94" + }, + "m_SlotId": 3 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "c9d7f0dbae7d422985a1cc87c025e76b" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "e818605f8f5a4f01bf61caaa33693581" + }, + "m_SlotId": 6 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "cdddee3a537c464697357f11b966f9b8" + }, + "m_SlotId": 7 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "88253223d2c34ecfab92b0c344048f94" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "d4df208fc23b42f2b52364124f1b661c" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "6b2f65c1463f4f7bad16c54a95d2fe75" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "dbcb748279484a4590e53518c49122b8" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "a455bd79094c4413a7b7dd80ca8b9368" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "dff7a66b353a4023b29c9d937da77960" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "cdddee3a537c464697357f11b966f9b8" + }, + "m_SlotId": 2 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "e818605f8f5a4f01bf61caaa33693581" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "f23a8b2b7c85478388ff7a8c8a6de740" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "ec184d6d9fb2494897774c9e7d279e6d" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "a455bd79094c4413a7b7dd80ca8b9368" + }, + "m_SlotId": 3 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "ec1f2e8bc9fd4ae38b133c60ee6c49b8" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "f814deb543c24fbbafbcdb5071d96022" + }, + "m_SlotId": 2 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "f23a8b2b7c85478388ff7a8c8a6de740" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "aa3e347d733e48f7b65d8a8847370eec" + }, + "m_SlotId": 2 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "f383b24f0bc6434dafe44b3e3d338a63" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "85a1ad8e741e41759002e8cdc8cd0b96" + }, + "m_SlotId": 3 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "f3d31c1f18d8491a8ecf5cbc37e4b7db" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "e818605f8f5a4f01bf61caaa33693581" + }, + "m_SlotId": 3 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "f814deb543c24fbbafbcdb5071d96022" + }, + "m_SlotId": 7 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "4abff6ff92fa4a05b203f10580988335" + }, + "m_SlotId": 3 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "faace8101df943d8956faa31728cb004" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "109f638d1f9b49d4991d6d21a86d4eb7" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "faace8101df943d8956faa31728cb004" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "56c25395796e4d2fbe5c892d428d1620" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "faace8101df943d8956faa31728cb004" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "6b2f65c1463f4f7bad16c54a95d2fe75" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "faace8101df943d8956faa31728cb004" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "b4a40cb6acd441acb83cfe0240bf910d" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "fdb77c3e92ee497b88ca5dc46dc45350" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "59bd90a849624124bae6464ee3669aa6" + }, + "m_SlotId": 1 + } + } + ], + "m_VertexContext": { + "m_Position": { + "x": -2624.000244140625, + "y": -3709.000244140625 + }, + "m_Blocks": [ + { + "m_Id": "48390d02257d41bf98eace1deaa4c539" + }, + { + "m_Id": "f4ecc442a2d246759f7c2c0412953d28" + }, + { + "m_Id": "7f2e6b5f15364ed9835d67d0cf4f8f65" + } + ] + }, + "m_FragmentContext": { + "m_Position": { + "x": -2624.000244140625, + "y": -3424.000244140625 + }, + "m_Blocks": [ + { + "m_Id": "aca823a8188948c782eddaf0f45e1868" + }, + { + "m_Id": "6e8946a245e842b38231d4a241bfb3ef" + }, + { + "m_Id": "cb7117ecb1d047a8b2cb00ed552cb181" + }, + { + "m_Id": "3c50439118b2496f9e390021b0964606" + } + ] + }, + "m_PreviewData": { + "serializedMesh": { + "m_SerializedMesh": "{\"mesh\":{\"fileID\":10210,\"guid\":\"0000000000000000e000000000000000\",\"type\":0}}", + "m_Guid": "" + } + }, + "m_Path": "TextMeshPro/SRP", + "m_ConcretePrecision": 0, + "m_PreviewMode": 2, + "m_OutputNode": { + "m_Id": "" + }, + "m_ActiveTargets": [ + { + "m_Id": "94300469581b4924ac7dda496811d45d" + } + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "007c75c776ac4f1babe9cd7ae1fc4f14", + "m_Group": { + "m_Id": "daaf032a109749a88c9b8ff8e1f8b541" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -5868.0, + "y": -3787.000244140625, + "width": 134.0, + "height": 34.0 + } + }, + "m_Slots": [ + { + "m_Id": "1356dc7cbdfa4199a6535d3bbf4cd536" + } + ], + "synonyms": [], + "m_Precision": 1, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "3e372195f4bd4845852a37839e5b602d" + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.Rendering.HighDefinition.ShaderGraph.BuiltinData", + "m_ObjectId": "00996039d61e400a9e854ce591ac35a0", + "m_Distortion": false, + "m_DistortionMode": 0, + "m_DistortionDepthTest": true, + "m_AddPrecomputedVelocity": false, + "m_TransparentWritesMotionVec": false, + "m_AlphaToMask": false, + "m_DepthOffset": false, + "m_TransparencyFog": true, + "m_AlphaTestShadow": false, + "m_BackThenFrontRendering": false, + "m_TransparentDepthPrepass": false, + "m_TransparentDepthPostpass": false, + "m_SupportLodCrossFade": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.GroupData", + "m_ObjectId": "013228b0fdf1424097798f0973a9a4fb", + "m_Title": "Face Texture", + "m_Position": { + "x": -4779.494140625, + "y": -2948.97265625 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "02559cbe5ad441a3904ccb75ded2b2c5", + "m_Id": 5, + "m_DisplayName": "Color2", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Color2", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "03182b3263304258b265266325c21f65", + "m_Id": 0, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "045c4f6b050549c7a0efb208e6349779", + "m_Id": 7, + "m_DisplayName": "A", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "04dc152dd2ba4d519391577eb1156235", + "m_Group": { + "m_Id": "013228b0fdf1424097798f0973a9a4fb" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4500.0, + "y": -2747.0, + "width": 151.0, + "height": 34.0 + } + }, + "m_Slots": [ + { + "m_Id": "3d04f5ba6e7b40d281f22eb424145acd" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "c9ec735d1a1046769e5601b2c97c849a" + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "04dfcc9ff13a4bf282ed46faec39d15c", + "m_Id": 4, + "m_DisplayName": "R", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "R", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.Internal.Vector1ShaderProperty", + "m_ObjectId": "05805bc6fcc941fd889922555c6c86d7", + "m_Guid": { + "m_GuidSerialized": "fe84e680-4cee-4ca5-be86-2e293a9ba093" + }, + "m_Name": "Ambient Shadow", + "m_DefaultReferenceName": "Vector1_05805bc6fcc941fd889922555c6c86d7", + "m_OverrideReferenceName": "_Ambient", + "m_GeneratePropertyBlock": true, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": 0.30000001192092898, + "m_FloatType": 1, + "m_RangeValues": { + "x": 0.0, + "y": 1.0 + } +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.Internal.Vector4ShaderProperty", + "m_ObjectId": "0580d4b7e3a049049569f4508643a724", + "m_Guid": { + "m_GuidSerialized": "eefb88c5-7665-45dc-b3c2-7cf98b9990d6" + }, + "m_Name": "Softness", + "m_DefaultReferenceName": "Vector4_D64EC33D", + "m_OverrideReferenceName": "_Softness", + "m_GeneratePropertyBlock": true, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicValueMaterialSlot", + "m_ObjectId": "068ae649e00b40e198ec5a30ad741fab", + "m_Id": 2, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "e00": 0.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 0.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 0.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 0.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "0699eea947fc426cbfeb8744cf120222", + "m_Id": 1, + "m_DisplayName": "Color", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Color", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.Internal.Vector4ShaderProperty", + "m_ObjectId": "07946387933e416db576b677f0711e5f", + "m_Guid": { + "m_GuidSerialized": "21d612fb-8153-41f8-9e2f-9de044c19fbf" + }, + "m_Name": "_FaceTex_ST", + "m_DefaultReferenceName": "Vector4_1A08AD4A", + "m_OverrideReferenceName": "_FaceTex_ST", + "m_GeneratePropertyBlock": true, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": { + "x": 1.0, + "y": 1.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicValueMaterialSlot", + "m_ObjectId": "082e9706dffc4c188270980d4e44ce0f", + "m_Id": 0, + "m_DisplayName": "A", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 3, + "m_Value": { + "e00": 0.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 0.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 0.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 0.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "0848ba750e0341198cf0bbd413e0efe4", + "m_Id": 0, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "09b1b86c1c074337a4c439d3a308dd2e", + "m_Id": 7, + "m_DisplayName": "A", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "0a67ca5280214bd794dc0ad66b5710a9", + "m_Id": 4, + "m_DisplayName": "R", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "R", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "0b57f2d35157477ab2b29a5aac14ae8b", + "m_Id": 1, + "m_DisplayName": "B", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 3, + "m_Value": { + "x": 1.0, + "y": 1.0, + "z": 1.0, + "w": 1.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "0ba4932e164847878ddb7b7bcff96985", + "m_Id": 1, + "m_DisplayName": "B", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 3, + "m_Value": { + "x": 1.0, + "y": 1.0, + "z": 1.0, + "w": 1.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "0c4dc51f26484c26ad88a3fe4002abcd", + "m_Id": 2, + "m_DisplayName": "Color (1)", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Color", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicValueMaterialSlot", + "m_ObjectId": "0d6a57754b824f6db9cefa6953bc06a9", + "m_Id": 1, + "m_DisplayName": "B", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 3, + "m_Value": { + "e00": 2.0, + "e01": 2.0, + "e02": 2.0, + "e03": 2.0, + "e10": 2.0, + "e11": 2.0, + "e12": 2.0, + "e13": 2.0, + "e20": 2.0, + "e21": 2.0, + "e22": 2.0, + "e23": 2.0, + "e30": 2.0, + "e31": 2.0, + "e32": 2.0, + "e33": 2.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "0d7878dd226d4cfb81a991dc312309fc", + "m_Id": 0, + "m_DisplayName": "Underlay Dilate", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.Rendering.Universal.ShaderGraph.UniversalUnlitSubTarget", + "m_ObjectId": "0eeb5490760e492f8c9691086fa00929" +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector2MaterialSlot", + "m_ObjectId": "0f7ffb6d2de4447f9736780cbcee8e07", + "m_Id": 4, + "m_DisplayName": "AnimSpeed", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "AnimSpeed", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0 + }, + "m_Labels": [ + "X", + "Y" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "0fac35636fca4474a6afaefc3c757775", + "m_Id": 1, + "m_DisplayName": "Alpha", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Alpha", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "105b1ed1aa714e41bbe1ef5472bdb11f", + "m_Group": { + "m_Id": "484b51c50485473b819c4f05087b32d7" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4923.99951171875, + "y": -4233.0, + "width": 158.99998474121095, + "height": 34.0 + } + }, + "m_Slots": [ + { + "m_Id": "8a08179f99d649d289b8053d5fa0ad22" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "49e7c3ad55ce458797f0e60c950cb965" + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.MultiplyNode", + "m_ObjectId": "109f638d1f9b49d4991d6d21a86d4eb7", + "m_Group": { + "m_Id": "42cadae0923e4969b50bbc3f78185934" + }, + "m_Name": "Multiply", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -5068.0, + "y": -3182.0, + "width": 130.0, + "height": 118.0 + } + }, + "m_Slots": [ + { + "m_Id": "880bb02c6c6b49b18aa6ebc66dc566a0" + }, + { + "m_Id": "1b9cd8f5f4004e2eaf8afbaab803bc04" + }, + { + "m_Id": "b224a1cf80604103ad085c799995f3c2" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "10a99c07aad742349d258db16838c129", + "m_Id": 1, + "m_DisplayName": "Alpha", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Alpha", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Texture2DInputMaterialSlot", + "m_ObjectId": "1196ae398cc348349ab0c1a23fdab4bd", + "m_Id": 1, + "m_DisplayName": "Texture", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Texture", + "m_StageCapability": 3, + "m_BareResource": false, + "m_Texture": { + "m_SerializedTexture": "{\"texture\":{\"instanceID\":0}}", + "m_Guid": "" + }, + "m_DefaultType": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Texture2DMaterialSlot", + "m_ObjectId": "1356dc7cbdfa4199a6535d3bbf4cd536", + "m_Id": 0, + "m_DisplayName": "_MainTex", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_BareResource": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "14ad19bf20a140dd88d58452d7df688b", + "m_Id": 5, + "m_DisplayName": "Softness", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Softness", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 1.0, + "z": 1.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "150533bad8e2424aaa2c74e253af8592", + "m_Group": { + "m_Id": "42cadae0923e4969b50bbc3f78185934" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4923.99951171875, + "y": -3486.666259765625, + "width": 135.3330078125, + "height": 33.999996185302737 + } + }, + "m_Slots": [ + { + "m_Id": "72fb5a0d7796446b9e2b929cb32facdc" + } + ], + "synonyms": [], + "m_Precision": 1, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "3e372195f4bd4845852a37839e5b602d" + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.SplitNode", + "m_ObjectId": "163beb4431c34f538340bc0af0991e6f", + "m_Group": { + "m_Id": "ecf16c34d46f4502ac601f0c38c7576b" + }, + "m_Name": "Split", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -3415.000244140625, + "y": -3462.0, + "width": 120.00000762939453, + "height": 149.00001525878907 + } + }, + "m_Slots": [ + { + "m_Id": "4c334de01ecd429baa7652fc6002536b" + }, + { + "m_Id": "e2d28f29bbac4983a401574480b5ca28" + }, + { + "m_Id": "6a7af6143e114a538663e71f56731a21" + }, + { + "m_Id": "3e25be96bb3747738c238cf3a741d5df" + }, + { + "m_Id": "4907352322c644ebacdf2ca30f2994fd" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "19075add867e4757b9520d18fe8de1d0", + "m_Group": { + "m_Id": "42cadae0923e4969b50bbc3f78185934" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4261.33349609375, + "y": -3197.33349609375, + "width": 124.66650390625, + "height": 34.0 + } + }, + "m_Slots": [ + { + "m_Id": "4c28ee9109014fa086e5de7a3993341d" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "0580d4b7e3a049049569f4508643a724" + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicValueMaterialSlot", + "m_ObjectId": "1b9cd8f5f4004e2eaf8afbaab803bc04", + "m_Id": 1, + "m_DisplayName": "B", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 3, + "m_Value": { + "e00": 2.0, + "e01": 2.0, + "e02": 2.0, + "e03": 2.0, + "e10": 2.0, + "e11": 2.0, + "e12": 2.0, + "e13": 2.0, + "e20": 2.0, + "e21": 2.0, + "e22": 2.0, + "e23": 2.0, + "e30": 2.0, + "e31": 2.0, + "e32": 2.0, + "e33": 2.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Texture2DInputMaterialSlot", + "m_ObjectId": "1bdde3efd3b7464b8934c555be0f8a48", + "m_Id": 1, + "m_DisplayName": "Texture", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Texture", + "m_StageCapability": 3, + "m_BareResource": false, + "m_Texture": { + "m_SerializedTexture": "{\"texture\":{\"instanceID\":0}}", + "m_Guid": "" + }, + "m_DefaultType": 0 +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.Internal.Vector1ShaderProperty", + "m_ObjectId": "1be90d4f96a841748b0c95219b12ad27", + "m_Guid": { + "m_GuidSerialized": "4c91c146-43bb-4de8-948a-fbf8b1da10e1" + }, + "m_Name": "Bevel Offset", + "m_DefaultReferenceName": "Vector1_97690701", + "m_OverrideReferenceName": "_BevelOffset", + "m_GeneratePropertyBlock": true, + "m_Precision": 1, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": 0.0, + "m_FloatType": 1, + "m_RangeValues": { + "x": -0.5, + "y": 0.5 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "1c4df61c2fea404eb3b87b270d7c59bc", + "m_Group": { + "m_Id": "42cadae0923e4969b50bbc3f78185934" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4280.0, + "y": -3221.33349609375, + "width": 145.3330078125, + "height": 34.0 + } + }, + "m_Slots": [ + { + "m_Id": "f864c900600e427ba7793f00c715e971" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "867a4ae13c0d4a028c71bc1063824c14" + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicValueMaterialSlot", + "m_ObjectId": "1d35fa1fb5004f96a65ace54fbe4f1ad", + "m_Id": 0, + "m_DisplayName": "A", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 3, + "m_Value": { + "e00": 0.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 0.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 0.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 0.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "1db37082bf844442804487b4944352de", + "m_Id": 4, + "m_DisplayName": "R", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "R", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Texture2DMaterialSlot", + "m_ObjectId": "1df58cfa4dad4c449d01ee1c5ea05f2e", + "m_Id": 0, + "m_DisplayName": "_MainTex", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_BareResource": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.UVNode", + "m_ObjectId": "1e12726617b24675958e942eb62e4b09", + "m_Group": { + "m_Id": "484b51c50485473b819c4f05087b32d7" + }, + "m_Name": "UV", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4772.0, + "y": -4404.0, + "width": 145.00001525878907, + "height": 130.0 + } + }, + "m_Slots": [ + { + "m_Id": "0848ba750e0341198cf0bbd413e0efe4" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_OutputChannel": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Texture2DInputMaterialSlot", + "m_ObjectId": "1f247658c7ba45fb93c41f51e21acb0d", + "m_Id": 1, + "m_DisplayName": "Texture", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Texture", + "m_StageCapability": 3, + "m_BareResource": false, + "m_Texture": { + "m_SerializedTexture": "{\"texture\":{\"instanceID\":0}}", + "m_Guid": "" + }, + "m_DefaultType": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "1f46181633594ae0a1fb2adb76b42981", + "m_Id": 5, + "m_DisplayName": "G", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "G", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "200245fc8bbe4826b209ab5f7ffe074c", + "m_Id": 3, + "m_DisplayName": "A", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.UVMaterialSlot", + "m_ObjectId": "204dacb5a95b424facf11cb6f65bd188", + "m_Id": 2, + "m_DisplayName": "UV", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "UV", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0 + }, + "m_Labels": [ + "X", + "Y" + ], + "m_Channel": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BooleanMaterialSlot", + "m_ObjectId": "215a82c127204988b751de7d3a39b955", + "m_Id": 6, + "m_DisplayName": "Outline", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Outline", + "m_StageCapability": 3, + "m_Value": false, + "m_DefaultValue": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.SamplerStateMaterialSlot", + "m_ObjectId": "215b30ae27784ec3a13360a9029af283", + "m_Id": 3, + "m_DisplayName": "Sampler", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Sampler", + "m_StageCapability": 3, + "m_BareResource": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Internal.BooleanShaderProperty", + "m_ObjectId": "21a7a380e66d42e780e2a2a1baa630d5", + "m_Guid": { + "m_GuidSerialized": "b2d0099f-e605-49f5-9959-e7cacae37aa3" + }, + "m_Name": "Bevel Type", + "m_DefaultReferenceName": "Boolean_21a7a380e66d42e780e2a2a1baa630d5", + "m_OverrideReferenceName": "_BevelType", + "m_GeneratePropertyBlock": true, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": false +} + +{ + "m_SGVersion": 3, + "m_Type": "UnityEditor.ShaderGraph.Internal.ColorShaderProperty", + "m_ObjectId": "22b7f3c2bb7b48c0a7fdeb50e33e7d5e", + "m_Guid": { + "m_GuidSerialized": "cd167d3a-7465-4d5a-86fc-0f22dc0ef908" + }, + "m_Name": "Outline Color 1", + "m_DefaultReferenceName": "Color_5550EB71", + "m_OverrideReferenceName": "_OutlineColor1", + "m_GeneratePropertyBlock": true, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": { + "r": 0.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "m_ColorMode": 1 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "232b1aa09e67479abae141d3c76d3c5b", + "m_Id": 0, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "256d41e89a204d22951450de1c38051d", + "m_Id": 0, + "m_DisplayName": "RGBA", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "RGBA", + "m_StageCapability": 2, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector3MaterialSlot", + "m_ObjectId": "26e48352a08441bfa694dcea54c06e36", + "m_Id": 5, + "m_DisplayName": "RGB", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "RGB", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [ + "X", + "Y", + "Z" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "281bcee4777040f8a31ee0e10344e98d", + "m_Id": 0, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 1.0, + "y": 1.0, + "z": 1.0, + "w": 1.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "285f6a9863d54ed2a8150727ad749456", + "m_Group": { + "m_Id": "98934a69591249d5b8b92b39045359a3" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4145.0, + "y": -2406.0, + "width": 154.0, + "height": 34.0 + } + }, + "m_Slots": [ + { + "m_Id": "b42e6dbfbc864097af182cbff5c0c1fb" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "22b7f3c2bb7b48c0a7fdeb50e33e7d5e" + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.Rendering.HighDefinition.ShaderGraph.HDUnlitSubTarget", + "m_ObjectId": "29b1a6d4abc94131be838c0bc77892fc" +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.IsFrontFaceNode", + "m_ObjectId": "2a552a0b828f457c911aa19561e410ae", + "m_Group": { + "m_Id": "d258902c6ec74942afdb9ebf8c1d07f8" + }, + "m_Name": "Is Front Face", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4282.0, + "y": -3681.3330078125, + "width": 121.99999237060547, + "height": 77.33348846435547 + } + }, + "m_Slots": [ + { + "m_Id": "2ef1d888dc9d49e59d6a6950897ddc93" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.CustomFunctionNode", + "m_ObjectId": "2ac79705aa9e415dbb74ec215233fd1b", + "m_Group": { + "m_Id": "" + }, + "m_Name": "Composite (Custom Function)", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -3277.3330078125, + "y": -3841.33349609375, + "width": 218.666748046875, + "height": 118.0 + } + }, + "m_Slots": [ + { + "m_Id": "a75f7ac601c446469802fe7754c1f279" + }, + { + "m_Id": "8c38a5d8327f456e9783740c05382619" + }, + { + "m_Id": "facc84930f544fd7a0205a6176b18ac0" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SourceType": 0, + "m_FunctionName": "Composite", + "m_FunctionSource": "96de908384869cd409c75efa351d5edf", + "m_FunctionBody": "Enter function body here..." +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "2b01ea3023e34c94af1754e4dcea8f2e", + "m_Id": 0, + "m_DisplayName": "Face Color", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BooleanMaterialSlot", + "m_ObjectId": "2bf5f2fdd2984599b7323d10cfb1d240", + "m_Id": 1, + "m_DisplayName": "Filter", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Filter", + "m_StageCapability": 3, + "m_Value": false, + "m_DefaultValue": false +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.Internal.Vector1ShaderProperty", + "m_ObjectId": "2c10b97b92c947ceb307a93759c0228b", + "m_Guid": { + "m_GuidSerialized": "6be0b8ff-a766-4c6b-a6e4-3a72758ac95f" + }, + "m_Name": "Bevel Amount", + "m_DefaultReferenceName": "Vector1_B01DD93E", + "m_OverrideReferenceName": "_BevelAmount", + "m_GeneratePropertyBlock": true, + "m_Precision": 1, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": 0.0, + "m_FloatType": 1, + "m_RangeValues": { + "x": 0.0, + "y": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "2c7a9460724b47daad8df1be144de7c6", + "m_Id": 3, + "m_DisplayName": "Transform", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Transform", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.Internal.Vector2ShaderProperty", + "m_ObjectId": "2d0a269511e34bd1ba9056d2c939dff2", + "m_Guid": { + "m_GuidSerialized": "edbe73dc-53ab-4bc1-9d64-ab36e0e05f03" + }, + "m_Name": "_FaceUVSpeed", + "m_DefaultReferenceName": "Vector2_3A8E0F13", + "m_OverrideReferenceName": "_FaceUVSpeed", + "m_GeneratePropertyBlock": true, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "2db15d90c2204143b225ec4ef08d0755", + "m_Group": { + "m_Id": "98934a69591249d5b8b92b39045359a3" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4350.0, + "y": -2396.0, + "width": 163.0, + "height": 34.0 + } + }, + "m_Slots": [ + { + "m_Id": "def8e0b9d8384982bc5b4c32d877e458" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "46fbf3eeb0ea4470869cba7443249295" + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicValueMaterialSlot", + "m_ObjectId": "2e4eb1ef08bb44178c82e53872485e0f", + "m_Id": 0, + "m_DisplayName": "A", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 3, + "m_Value": { + "e00": 0.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 0.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 0.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 0.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BooleanMaterialSlot", + "m_ObjectId": "2ef1d888dc9d49e59d6a6950897ddc93", + "m_Id": 0, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 2, + "m_Value": true, + "m_DefaultValue": true +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.Rendering.HighDefinition.ShaderGraph.SystemData", + "m_ObjectId": "305e3be306674fcd8bb02273d27ee5b7", + "m_MaterialNeedsUpdateHash": 280370, + "m_SurfaceType": 1, + "m_RenderingPass": 4, + "m_BlendMode": 0, + "m_ZTest": 4, + "m_ZWrite": false, + "m_TransparentCullMode": 2, + "m_OpaqueCullMode": 2, + "m_SortPriority": 0, + "m_AlphaTest": true, + "m_TransparentDepthPrepass": false, + "m_TransparentDepthPostpass": false, + "m_SupportLodCrossFade": false, + "m_DoubleSidedMode": 0, + "m_DOTSInstancing": false, + "m_Version": 0, + "m_FirstTimeMigrationExecuted": true, + "inspectorFoldoutMask": 9 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "30ca940fe2794c949f2a1d4d2caaa446", + "m_Id": 2, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.SampleTexture2DNode", + "m_ObjectId": "319916a5921343f7b7eef0e50dc93def", + "m_Group": { + "m_Id": "42cadae0923e4969b50bbc3f78185934" + }, + "m_Name": "Sample Texture 2D", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4760.0, + "y": -3245.000244140625, + "width": 184.0, + "height": 253.0 + } + }, + "m_Slots": [ + { + "m_Id": "d219977210094c0082c517d8dc00c8bb" + }, + { + "m_Id": "f48f04ad45d046a8b88e71731ed506e7" + }, + { + "m_Id": "e6e80c6b0db545cda26b079a9a78fbb3" + }, + { + "m_Id": "c6bdb985bc16435fa72f5a3c81bb633c" + }, + { + "m_Id": "d1a17e42e7a04dc38984e3c01149445b" + }, + { + "m_Id": "fb15d0ba56d54a6192f11e107aeb5fa8" + }, + { + "m_Id": "c35312edaa2344788b1964ee2f63a236" + }, + { + "m_Id": "c88fcbaeea954a5f9c68c339fa8b604d" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_TextureType": 0, + "m_NormalMapSpace": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "34a67e0fef884f9399e674d9eeaf720c", + "m_Id": 6, + "m_DisplayName": "Color3", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Color3", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "34a72a5ebb04402384a4fd3748111a37", + "m_Id": 0, + "m_DisplayName": "Alpha Clip Threshold", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "AlphaClipThreshold", + "m_StageCapability": 2, + "m_Value": 0.0010000000474974514, + "m_DefaultValue": 0.5, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Texture2DMaterialSlot", + "m_ObjectId": "3535ae87c6dd4769b52b20d9eca61069", + "m_Id": 0, + "m_DisplayName": "_MainTex", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_BareResource": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.SamplerStateMaterialSlot", + "m_ObjectId": "35cbea6373dd4e4f8d0fea36e8add392", + "m_Id": 3, + "m_DisplayName": "Sampler", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Sampler", + "m_StageCapability": 3, + "m_BareResource": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicValueMaterialSlot", + "m_ObjectId": "36a0c473c4c04c3a930dd38f3920d410", + "m_Id": 1, + "m_DisplayName": "B", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 3, + "m_Value": { + "e00": 2.0, + "e01": 2.0, + "e02": 2.0, + "e03": 2.0, + "e10": 2.0, + "e11": 2.0, + "e12": 2.0, + "e13": 2.0, + "e20": 2.0, + "e21": 2.0, + "e22": 2.0, + "e23": 2.0, + "e30": 2.0, + "e31": 2.0, + "e32": 2.0, + "e33": 2.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.UVNode", + "m_ObjectId": "36f1b4d96f2941c39e5cd95d9c1d2ce6", + "m_Group": { + "m_Id": "d0a791a544614667962a9a9a9ce0c68a" + }, + "m_Name": "UV", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -6314.6669921875, + "y": -3285.3330078125, + "width": 144.6669921875, + "height": 129.33348083496095 + } + }, + "m_Slots": [ + { + "m_Id": "65b3dc13b2b6484283ffe5abfe87a06a" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_OutputChannel": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicValueMaterialSlot", + "m_ObjectId": "373f1de8db6c429c9d46c781f741d7a4", + "m_Id": 1, + "m_DisplayName": "B", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 3, + "m_Value": { + "e00": 2.0, + "e01": 2.0, + "e02": 2.0, + "e03": 2.0, + "e10": 2.0, + "e11": 2.0, + "e12": 2.0, + "e13": 2.0, + "e20": 2.0, + "e21": 2.0, + "e22": 2.0, + "e23": 2.0, + "e30": 2.0, + "e31": 2.0, + "e32": 2.0, + "e33": 2.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "3802c81c3be24823aa1d7c9997a33c29", + "m_Id": 2, + "m_DisplayName": "RGBA", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "RGBA", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Texture2DInputMaterialSlot", + "m_ObjectId": "3915c1927ffe49f8967304321cfbe497", + "m_Id": 4, + "m_DisplayName": "Atlas", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Atlas", + "m_StageCapability": 3, + "m_BareResource": true, + "m_Texture": { + "m_SerializedTexture": "{\"texture\":{\"instanceID\":0}}", + "m_Guid": "" + }, + "m_DefaultType": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "39a382d661e2484da71f04c43f48e55f", + "m_Id": 3, + "m_DisplayName": "A", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.VertexColorNode", + "m_ObjectId": "39f2f84f30304d859fb07569e2695f60", + "m_Group": { + "m_Id": "ecf16c34d46f4502ac601f0c38c7576b" + }, + "m_Name": "Vertex Color", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -3554.000244140625, + "y": -3462.0, + "width": 116.00000762939453, + "height": 94.00000762939453 + } + }, + "m_Slots": [ + { + "m_Id": "4b2d9ea03bf64fa19dcae1511d2581da" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 2, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BlockNode", + "m_ObjectId": "3c50439118b2496f9e390021b0964606", + "m_Group": { + "m_Id": "" + }, + "m_Name": "SurfaceDescription.AlphaClipThreshold", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -3028.0, + "y": -3054.0, + "width": 200.0, + "height": 40.66650390625 + } + }, + "m_Slots": [ + { + "m_Id": "34a72a5ebb04402384a4fd3748111a37" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SerializedDescriptor": "SurfaceDescription.AlphaClipThreshold" +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Texture2DMaterialSlot", + "m_ObjectId": "3d04f5ba6e7b40d281f22eb424145acd", + "m_Id": 0, + "m_DisplayName": "Face Texture", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_BareResource": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "3db1608e927e4102a3c3a88e9fcab39a", + "m_Id": 3, + "m_DisplayName": "Transform", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Transform", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "3dccd64e7f324bc1a75c1479d7a67c51", + "m_Id": 0, + "m_DisplayName": "In", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "In", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.CombineNode", + "m_ObjectId": "3e231021af7b47ba97f2871e7f25d0fe", + "m_Group": { + "m_Id": "ecf16c34d46f4502ac601f0c38c7576b" + }, + "m_Name": "Combine", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -2934.000244140625, + "y": -3466.0, + "width": 141.33349609375, + "height": 166.0 + } + }, + "m_Slots": [ + { + "m_Id": "6ccaced3889e4503a9414d808ec33981" + }, + { + "m_Id": "7f3d71a6c96847c099da45f95aafbecb" + }, + { + "m_Id": "d8edec16956c4f15b7d51d6ec10753f4" + }, + { + "m_Id": "39a382d661e2484da71f04c43f48e55f" + }, + { + "m_Id": "8764669016f6442f8152593c18a649d7" + }, + { + "m_Id": "26e48352a08441bfa694dcea54c06e36" + }, + { + "m_Id": "3e94a0d106064bdb864c960512ef4026" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "3e25be96bb3747738c238cf3a741d5df", + "m_Id": 3, + "m_DisplayName": "B", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Internal.Texture2DShaderProperty", + "m_ObjectId": "3e372195f4bd4845852a37839e5b602d", + "m_Guid": { + "m_GuidSerialized": "60abd046-2a1a-48cd-a0af-2f702f7f53ab" + }, + "m_Name": "_MainTex", + "m_DefaultReferenceName": "Texture2D_90CBF488", + "m_OverrideReferenceName": "_MainTex", + "m_GeneratePropertyBlock": true, + "m_Precision": 1, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": { + "m_SerializedTexture": "{\"texture\":{\"fileID\":28684132378477856,\"guid\":\"8f586378b4e144a9851e7b34d9b748ee\",\"type\":2}}", + "m_Guid": "" + }, + "m_Modifiable": true, + "m_DefaultType": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector2MaterialSlot", + "m_ObjectId": "3e94a0d106064bdb864c960512ef4026", + "m_Id": 6, + "m_DisplayName": "RG", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "RG", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0 + }, + "m_Labels": [ + "X", + "Y" + ] +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.Internal.Vector1ShaderProperty", + "m_ObjectId": "3ec4797e381747829ef4712c85fcf7a1", + "m_Guid": { + "m_GuidSerialized": "020d65cc-50a8-4b8a-a624-90d7b489f549" + }, + "m_Name": "Specular Power", + "m_DefaultReferenceName": "Vector1_3ec4797e381747829ef4712c85fcf7a1", + "m_OverrideReferenceName": "_SpecularPower", + "m_GeneratePropertyBlock": true, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": 0.0, + "m_FloatType": 1, + "m_RangeValues": { + "x": 0.0, + "y": 4.0 + } +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.Internal.Vector2ShaderProperty", + "m_ObjectId": "3fdf4b7bc5d4426492dcc057603ef4a6", + "m_Guid": { + "m_GuidSerialized": "675d2567-3fca-4da6-9462-dfa4924950f1" + }, + "m_Name": "_OutlineUVSpeed", + "m_DefaultReferenceName": "Vector2_D66D89E6", + "m_OverrideReferenceName": "_OutlineUVSpeed", + "m_GeneratePropertyBlock": true, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicValueMaterialSlot", + "m_ObjectId": "400d0b6c95dd4540ad3da3e8cb7e50b2", + "m_Id": 2, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "e00": 0.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 0.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 0.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 0.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicValueMaterialSlot", + "m_ObjectId": "41986ac6400d46709d0ef043a67f6b34", + "m_Id": 2, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "e00": 0.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 0.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 0.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 0.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "41b9b79b3859472882bcea393703eec0", + "m_Id": 0, + "m_DisplayName": "RGBA", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "RGBA", + "m_StageCapability": 2, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.Internal.Vector1ShaderProperty", + "m_ObjectId": "424dbeeb009344efa29c304c4979e3d6", + "m_Guid": { + "m_GuidSerialized": "314c37de-c6f2-4463-866d-8588f6fc119e" + }, + "m_Name": "Diffuse Shadow", + "m_DefaultReferenceName": "Vector1_424dbeeb009344efa29c304c4979e3d6", + "m_OverrideReferenceName": "_Diffuse", + "m_GeneratePropertyBlock": true, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": 0.30000001192092898, + "m_FloatType": 1, + "m_RangeValues": { + "x": 0.0, + "y": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "42a586e4f6ec40eeaba891b7fd133864", + "m_Group": { + "m_Id": "484b51c50485473b819c4f05087b32d7" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4934.0, + "y": -4442.99951171875, + "width": 133.99998474121095, + "height": 33.999996185302737 + } + }, + "m_Slots": [ + { + "m_Id": "da7a06d393a44089842070d51d2aa0a6" + } + ], + "synonyms": [], + "m_Precision": 1, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "3e372195f4bd4845852a37839e5b602d" + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.GroupData", + "m_ObjectId": "42cadae0923e4969b50bbc3f78185934", + "m_Title": "Face + 3 Outlines + Underlay", + "m_Position": { + "x": -5437.0, + "y": -3558.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "4328cdbf78b94c038fd614c59bfe1cac", + "m_Id": 0, + "m_DisplayName": "RGBA", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "RGBA", + "m_StageCapability": 2, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.CustomFunctionNode", + "m_ObjectId": "44317f2e371447e2a8d894f8a021a235", + "m_Group": { + "m_Id": "484b51c50485473b819c4f05087b32d7" + }, + "m_Name": "Layer1 (Custom Function)", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4004.999755859375, + "y": -4173.0, + "width": 191.0, + "height": 118.0 + } + }, + "m_Slots": [ + { + "m_Id": "10a99c07aad742349d258db16838c129" + }, + { + "m_Id": "b85d677872b44421bf5536f42ba0267c" + }, + { + "m_Id": "75aba700d74d4b2687bf3166cf1da3e2" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SourceType": 0, + "m_FunctionName": "Layer1", + "m_FunctionSource": "96de908384869cd409c75efa351d5edf", + "m_FunctionBody": "Enter function body here..." +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "44806230fa384c1e95f9c5918a14f056", + "m_Id": 7, + "m_DisplayName": "A", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "4488af8ff6a7421298a7e827f567263b", + "m_Group": { + "m_Id": "484b51c50485473b819c4f05087b32d7" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4226.0, + "y": -4109.0, + "width": 158.0, + "height": 34.0 + } + }, + "m_Slots": [ + { + "m_Id": "66f69ef16eac4eb48357bde804cf3c39" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "8cf8aae64c1d443f9303126886b40f17" + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.UVNode", + "m_ObjectId": "4648b46ad29a4008a80de4f8a5a5b813", + "m_Group": { + "m_Id": "98934a69591249d5b8b92b39045359a3" + }, + "m_Name": "UV", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4576.0, + "y": -2437.0, + "width": 145.0, + "height": 130.0 + } + }, + "m_Slots": [ + { + "m_Id": "b2baf44eae52473cb6cda7b1debece01" + } + ], + "synonyms": [], + "m_Precision": 1, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_OutputChannel": 1 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Internal.Texture2DShaderProperty", + "m_ObjectId": "46fbf3eeb0ea4470869cba7443249295", + "m_Guid": { + "m_GuidSerialized": "be87c5a3-e361-4b95-89c8-911c39a51c0d" + }, + "m_Name": "Outline Texture", + "m_DefaultReferenceName": "Texture2D_A0B54237", + "m_OverrideReferenceName": "_OutlineTex", + "m_GeneratePropertyBlock": true, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": { + "m_SerializedTexture": "{\"texture\":{\"instanceID\":0}}", + "m_Guid": "" + }, + "m_Modifiable": true, + "m_DefaultType": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "47d020251e9841a5b1f0fd64396026a1", + "m_Id": 1, + "m_DisplayName": "B", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 3, + "m_Value": { + "x": 1.0, + "y": 1.0, + "z": 1.0, + "w": 1.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BlockNode", + "m_ObjectId": "48390d02257d41bf98eace1deaa4c539", + "m_Group": { + "m_Id": "" + }, + "m_Name": "VertexDescription.Position", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": 0.0, + "y": 0.0, + "width": 0.0, + "height": 0.0 + } + }, + "m_Slots": [ + { + "m_Id": "8036d0e6090b456e9b4ea87227868236" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SerializedDescriptor": "VertexDescription.Position" +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.GroupData", + "m_ObjectId": "484b51c50485473b819c4f05087b32d7", + "m_Title": "Underlay", + "m_Position": { + "x": -5253.0, + "y": -4542.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "4907352322c644ebacdf2ca30f2994fd", + "m_Id": 4, + "m_DisplayName": "A", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.Internal.Vector2ShaderProperty", + "m_ObjectId": "49e7c3ad55ce458797f0e60c950cb965", + "m_Guid": { + "m_GuidSerialized": "31b55db9-0da1-4ec4-af2b-d83747ed5bc4" + }, + "m_Name": "Underlay Offset", + "m_DefaultReferenceName": "Vector2_CE9DEDB3", + "m_OverrideReferenceName": "_UnderlayOffset", + "m_GeneratePropertyBlock": true, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "4a66dcbe712a4d40bd8f355b834594b5", + "m_Id": 6, + "m_DisplayName": "B", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.CombineNode", + "m_ObjectId": "4abff6ff92fa4a05b203f10580988335", + "m_Group": { + "m_Id": "42cadae0923e4969b50bbc3f78185934" + }, + "m_Name": "Combine", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4293.3330078125, + "y": -3497.99951171875, + "width": 140.66648864746095, + "height": 166.0 + } + }, + "m_Slots": [ + { + "m_Id": "b015d1b7e4134c59baf6851e7649802c" + }, + { + "m_Id": "d9dc4839ee2847999110bdb234d6041a" + }, + { + "m_Id": "91d6a9a5fbc04ea49075cb51835e7264" + }, + { + "m_Id": "f42ad06b3c6a45d3ab33de904c063412" + }, + { + "m_Id": "ed6c215a65584deeaefad1d2c7743044" + }, + { + "m_Id": "edbee7a8952b46529ac5ad0365775774" + }, + { + "m_Id": "70337a74f6ad4b7bb6befc825219bab1" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "4b2d9ea03bf64fa19dcae1511d2581da", + "m_Id": 0, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 1.0, + "y": 1.0, + "z": 1.0, + "w": 1.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "4bda5c294e1949138d033640e1d385b4", + "m_Id": 1, + "m_DisplayName": "B", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 3, + "m_Value": { + "x": 1.0, + "y": 1.0, + "z": 1.0, + "w": 1.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "4c28ee9109014fa086e5de7a3993341d", + "m_Id": 0, + "m_DisplayName": "Softness", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "4c334de01ecd429baa7652fc6002536b", + "m_Id": 0, + "m_DisplayName": "In", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "In", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "4d1cb1a475df49f9a148195a65f5453a", + "m_Id": 0, + "m_DisplayName": "A", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 3, + "m_Value": { + "x": 1.0, + "y": 1.0, + "z": 1.0, + "w": 1.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "4d9ce48719d143748f9f8e22da6f9ddc", + "m_Id": 5, + "m_DisplayName": "TextureWidth", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "TextureWidth", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "4e64dac49ddc47c3b5b1e27b17a08304", + "m_Id": 2, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector2MaterialSlot", + "m_ObjectId": "4e90ca54c0cc46a18ea600be7c80413a", + "m_Id": 0, + "m_DisplayName": "UV_1", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "UV_1", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Texture2DInputMaterialSlot", + "m_ObjectId": "4eb3c00a1ca44e10be833b7ca61ff059", + "m_Id": 1, + "m_DisplayName": "Texture", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Texture", + "m_StageCapability": 3, + "m_BareResource": false, + "m_Texture": { + "m_SerializedTexture": "{\"texture\":{\"fileID\":-2362172177983852347,\"guid\":\"dda5bcb0d1e9515498f6e4e038bbefe6\",\"type\":2}}", + "m_Guid": "" + }, + "m_DefaultType": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "4f194ff591484e908fc2bcdacbcf2570", + "m_Group": { + "m_Id": "013228b0fdf1424097798f0973a9a4fb" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4255.0, + "y": -2771.0, + "width": 134.0, + "height": 34.0 + } + }, + "m_Slots": [ + { + "m_Id": "2b01ea3023e34c94af1754e4dcea8f2e" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "dc75c4e3a1bc4bb0a128086c2b0679a5" + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Texture2DInputMaterialSlot", + "m_ObjectId": "509e6f38505b4b0695b263706a55028f", + "m_Id": 1, + "m_DisplayName": "Texture", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Texture", + "m_StageCapability": 3, + "m_BareResource": false, + "m_Texture": { + "m_SerializedTexture": "{\"texture\":{\"fileID\":-2362172177983852347,\"guid\":\"dda5bcb0d1e9515498f6e4e038bbefe6\",\"type\":2}}", + "m_Guid": "" + }, + "m_DefaultType": 0 +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.CustomFunctionNode", + "m_ObjectId": "51378bae98a94c309785d14cd5cbb453", + "m_Group": { + "m_Id": "d258902c6ec74942afdb9ebf8c1d07f8" + }, + "m_Name": "GetSurfaceNormal (Custom Function)", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4067.333251953125, + "y": -3881.99951171875, + "width": 263.9999694824219, + "height": 189.99998474121095 + } + }, + "m_Slots": [ + { + "m_Id": "5b0077c23eae443887872f84227deccc" + }, + { + "m_Id": "3915c1927ffe49f8967304321cfbe497" + }, + { + "m_Id": "4d9ce48719d143748f9f8e22da6f9ddc" + }, + { + "m_Id": "ebd6d75abcb84108bcadbfe7ee5f6244" + }, + { + "m_Id": "ef9738ec7e894772a14e9dce441c16c6" + }, + { + "m_Id": "9eeec1a9713045af8845cea263d5ea48" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SourceType": 0, + "m_FunctionName": "GetSurfaceNormal", + "m_FunctionSource": "96de908384869cd409c75efa351d5edf", + "m_FunctionBody": "Enter function body here..." +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.SamplerStateMaterialSlot", + "m_ObjectId": "51f76f8a53ad43a4ad028426548ce9ba", + "m_Id": 3, + "m_DisplayName": "Sampler", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Sampler", + "m_StageCapability": 3, + "m_BareResource": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "52798bdb86f6400e86489a7a368e9f8b", + "m_Group": { + "m_Id": "d0a791a544614667962a9a9a9ce0c68a" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -6460.6669921875, + "y": -3113.333251953125, + "width": 135.33349609375, + "height": 33.999996185302737 + } + }, + "m_Slots": [ + { + "m_Id": "1df58cfa4dad4c449d01ee1c5ea05f2e" + } + ], + "synonyms": [], + "m_Precision": 1, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "3e372195f4bd4845852a37839e5b602d" + } +} + +{ + "m_SGVersion": 3, + "m_Type": "UnityEditor.ShaderGraph.Internal.ColorShaderProperty", + "m_ObjectId": "53073e5ea924459fa6681a4943e9f947", + "m_Guid": { + "m_GuidSerialized": "5fdac24e-2d58-4471-80ce-79c3ab9a2564" + }, + "m_Name": "Outline Color 2", + "m_DefaultReferenceName": "Color_DBAB5AEC", + "m_OverrideReferenceName": "_OutlineColor2", + "m_GeneratePropertyBlock": true, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": { + "r": 0.009433984756469727, + "g": 0.02534518577158451, + "b": 1.0, + "a": 1.0 + }, + "m_ColorMode": 1 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "54d7a93ffec5490aa4591da23a21b693", + "m_Id": 1, + "m_DisplayName": "G", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "G", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector2MaterialSlot", + "m_ObjectId": "55ffa45ec3654d5e88089fb40d2b0465", + "m_Id": 4, + "m_DisplayName": "AnimSpeed", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "AnimSpeed", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0 + }, + "m_Labels": [ + "X", + "Y" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.MultiplyNode", + "m_ObjectId": "56c25395796e4d2fbe5c892d428d1620", + "m_Group": { + "m_Id": "42cadae0923e4969b50bbc3f78185934" + }, + "m_Name": "Multiply", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -5071.99951171875, + "y": -3427.0, + "width": 129.99998474121095, + "height": 117.99999237060547 + } + }, + "m_Slots": [ + { + "m_Id": "9eb8137a6c2e41bbafdc8b0732dd47a3" + }, + { + "m_Id": "36a0c473c4c04c3a930dd38f3920d410" + }, + { + "m_Id": "068ae649e00b40e198ec5a30ad741fab" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.UVMaterialSlot", + "m_ObjectId": "57abc172afd449e2a4d567f93432507b", + "m_Id": 2, + "m_DisplayName": "UV", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "UV", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0 + }, + "m_Labels": [ + "X", + "Y" + ], + "m_Channel": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "582d6e289dbe4fdca7cf0307273eaa2f", + "m_Id": 0, + "m_DisplayName": "RGBA", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "RGBA", + "m_StageCapability": 2, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.MultiplyNode", + "m_ObjectId": "59bd90a849624124bae6464ee3669aa6", + "m_Group": { + "m_Id": "98934a69591249d5b8b92b39045359a3" + }, + "m_Name": "Multiply", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -3972.0, + "y": -2385.0, + "width": 130.0, + "height": 118.0 + } + }, + "m_Slots": [ + { + "m_Id": "2e4eb1ef08bb44178c82e53872485e0f" + }, + { + "m_Id": "8695190a5e614f2d90081871a8a06fc2" + }, + { + "m_Id": "81bdb47901ef48e5a588c6724b1b0142" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector3MaterialSlot", + "m_ObjectId": "5b0077c23eae443887872f84227deccc", + "m_Id": 0, + "m_DisplayName": "Normal", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Normal", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [ + "X", + "Y", + "Z" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "5b3ff4ee364f4d7a923b530ad60d8762", + "m_Id": 0, + "m_DisplayName": "Width", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Width", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.Internal.Vector1ShaderProperty", + "m_ObjectId": "5bd258837c514ff7ab0bf7027e762c18", + "m_Guid": { + "m_GuidSerialized": "2d8f3ee9-1307-4b58-a60d-526e86b07109" + }, + "m_Name": "Bevel Roundness", + "m_DefaultReferenceName": "Vector1_AB6A015F", + "m_OverrideReferenceName": "_BevelRoundness", + "m_GeneratePropertyBlock": true, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": 0.0, + "m_FloatType": 1, + "m_RangeValues": { + "x": 0.0, + "y": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "5da82bf481f8489ebd05e997f617f51b", + "m_Id": 4, + "m_DisplayName": "Isoperimeter", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Isoperimeter", + "m_StageCapability": 3, + "m_Value": 4.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "5e42524569844befad16fda5a94eb9cb", + "m_Id": 0, + "m_DisplayName": "R", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "R", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.Internal.Vector1ShaderProperty", + "m_ObjectId": "5fbe253f3e444f2aa8ac717f9c856619", + "m_Guid": { + "m_GuidSerialized": "0a61c93f-6430-4aa6-af07-79bc3b411ccd" + }, + "m_Name": "Bevel Width", + "m_DefaultReferenceName": "Vector1_B50BBFCC", + "m_OverrideReferenceName": "_BevelWidth", + "m_GeneratePropertyBlock": true, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": 0.0, + "m_FloatType": 1, + "m_RangeValues": { + "x": 0.0, + "y": 0.5 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "61133d79a89048c195f54939b2a1d30a", + "m_Id": 2, + "m_DisplayName": "Alpha", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Alpha", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "61a6ac5f29344d109411f26850ab0a96", + "m_Id": 6, + "m_DisplayName": "B", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.Rendering.HighDefinition.ShaderGraph.HDLitData", + "m_ObjectId": "6238ae56182d404f8563cb88cb801549", + "m_RayTracing": false, + "m_MaterialType": 0, + "m_RefractionModel": 0, + "m_SSSTransmission": true, + "m_EnergyConservingSpecular": true, + "m_ClearCoat": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "6271438664e74b3fbf723bd6a1f50f8b", + "m_Id": 6, + "m_DisplayName": "B", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "62bc551cea604e88b7858cc37d96a98a", + "m_Id": 2, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.Internal.Vector2ShaderProperty", + "m_ObjectId": "636180f6e0504f2baaa5cc086980cb47", + "m_Guid": { + "m_GuidSerialized": "c1223e37-093d-4d5a-b2b0-cd9cc3e4f88e" + }, + "m_Name": "Outline Offset 1", + "m_DefaultReferenceName": "Vector2_636180f6e0504f2baaa5cc086980cb47", + "m_OverrideReferenceName": "_OutlineOffset1", + "m_GeneratePropertyBlock": true, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "63c7cd57fc3c45a9a97b514fdae32693", + "m_Group": { + "m_Id": "42cadae0923e4969b50bbc3f78185934" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -5235.99951171875, + "y": -3386.999755859375, + "width": 141.99998474121095, + "height": 33.999996185302737 + } + }, + "m_Slots": [ + { + "m_Id": "c422a9a9ff824176aad2241f58c44d0b" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "636180f6e0504f2baaa5cc086980cb47" + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "641eda269d7b4da9acb65f8d50035ea9", + "m_Id": 0, + "m_DisplayName": "SSR", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "SSR", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "65b3dc13b2b6484283ffe5abfe87a06a", + "m_Id": 0, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.SampleTexture2DNode", + "m_ObjectId": "65c8e64a7535466e933eed08a2f77532", + "m_Group": { + "m_Id": "42cadae0923e4969b50bbc3f78185934" + }, + "m_Name": "Sample Texture 2D", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4759.99951171875, + "y": -3498.666259765625, + "width": 186.0, + "height": 251.33323669433595 + } + }, + "m_Slots": [ + { + "m_Id": "256d41e89a204d22951450de1c38051d" + }, + { + "m_Id": "0a67ca5280214bd794dc0ad66b5710a9" + }, + { + "m_Id": "ebbd94a7102a4457a48ac492de3bff14" + }, + { + "m_Id": "6271438664e74b3fbf723bd6a1f50f8b" + }, + { + "m_Id": "c9b722d107ce4cd6a748c883472b9b0f" + }, + { + "m_Id": "74cf69e61bef44589521f1bf2bf3c59a" + }, + { + "m_Id": "6e532f83d1c44e839bcfc5845d3b01d6" + }, + { + "m_Id": "cb5e9f9567e84f8fa5463efc0e256e19" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_TextureType": 0, + "m_NormalMapSpace": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "66f69ef16eac4eb48357bde804cf3c39", + "m_Id": 0, + "m_DisplayName": "_UnderlayColor", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "67a519f507384ff1861df5d8d5b486be", + "m_Group": { + "m_Id": "d258902c6ec74942afdb9ebf8c1d07f8" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4278.0, + "y": -3939.99951171875, + "width": 135.3330078125, + "height": 33.999996185302737 + } + }, + "m_Slots": [ + { + "m_Id": "c3e6d7c20c184bf39fd8822130e693e7" + } + ], + "synonyms": [], + "m_Precision": 1, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "3e372195f4bd4845852a37839e5b602d" + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.Rendering.HighDefinition.ShaderGraph.HDLitSubTarget", + "m_ObjectId": "67bc2306558f4f2fa807637aaebaeab4" +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "68ec7c31365549d6a8ce883edfc02de2", + "m_Id": 4, + "m_DisplayName": "Color1", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Color1", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "6a7af6143e114a538663e71f56731a21", + "m_Id": 2, + "m_DisplayName": "G", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "G", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.MultiplyNode", + "m_ObjectId": "6b2f65c1463f4f7bad16c54a95d2fe75", + "m_Group": { + "m_Id": "42cadae0923e4969b50bbc3f78185934" + }, + "m_Name": "Multiply", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -5070.0, + "y": -3301.0, + "width": 130.0, + "height": 118.0 + } + }, + "m_Slots": [ + { + "m_Id": "1d35fa1fb5004f96a65ace54fbe4f1ad" + }, + { + "m_Id": "fa6de3be9f5b4411b5081b49e645f424" + }, + { + "m_Id": "400d0b6c95dd4540ad3da3e8cb7e50b2" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "6ccaced3889e4503a9414d808ec33981", + "m_Id": 0, + "m_DisplayName": "R", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "R", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "6dfc1177dd0541a7a780fbf911ad1956", + "m_Id": 0, + "m_DisplayName": "_OutlineTex_ST", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "6e13f3cd573c467a94379f45d96cb690", + "m_Id": 2, + "m_DisplayName": "SSR", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "SSR", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.UVMaterialSlot", + "m_ObjectId": "6e532f83d1c44e839bcfc5845d3b01d6", + "m_Id": 2, + "m_DisplayName": "UV", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "UV", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0 + }, + "m_Labels": [], + "m_Channel": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BlockNode", + "m_ObjectId": "6e8946a245e842b38231d4a241bfb3ef", + "m_Group": { + "m_Id": "" + }, + "m_Name": "SurfaceDescription.BaseColor", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -3026.0, + "y": -3110.0, + "width": 200.0, + "height": 40.66650390625 + } + }, + "m_Slots": [ + { + "m_Id": "ef0b93f78372439696f50711eaf57d90" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SerializedDescriptor": "SurfaceDescription.BaseColor" +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "6fbdcc5a972b4fa883dc5f21e525a376", + "m_Id": 0, + "m_DisplayName": "A", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 3, + "m_Value": { + "x": 1.0, + "y": 1.0, + "z": 1.0, + "w": 1.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector2MaterialSlot", + "m_ObjectId": "70337a74f6ad4b7bb6befc825219bab1", + "m_Id": 6, + "m_DisplayName": "RG", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "RG", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "712da461f71a454db59d349f752d41ee", + "m_Id": 2, + "m_DisplayName": "Height", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Height", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "71dd947935b64ce38f0d25406dde447b", + "m_Id": 5, + "m_DisplayName": "G", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "G", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "724e17584e97443e9e285dfa7253c8e3", + "m_Id": 0, + "m_DisplayName": "Alpha", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Alpha", + "m_StageCapability": 2, + "m_Value": 0.15000000596046449, + "m_DefaultValue": 1.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Texture2DMaterialSlot", + "m_ObjectId": "72fb5a0d7796446b9e2b929cb32facdc", + "m_Id": 0, + "m_DisplayName": "_MainTex", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_BareResource": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.UVNode", + "m_ObjectId": "7444469eb9884253819add9ef96baa25", + "m_Group": { + "m_Id": "d258902c6ec74942afdb9ebf8c1d07f8" + }, + "m_Name": "UV", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4298.0, + "y": -3809.99951171875, + "width": 144.66648864746095, + "height": 129.33323669433595 + } + }, + "m_Slots": [ + { + "m_Id": "03182b3263304258b265266325c21f65" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_OutputChannel": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "748c31bbcecc4b30bec2e42c0612175b", + "m_Id": 0, + "m_DisplayName": "A", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 3, + "m_Value": { + "x": 1.0, + "y": 1.0, + "z": 1.0, + "w": 1.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.Internal.Vector2ShaderProperty", + "m_ObjectId": "74b41464cbed4e9e8e23af5ab9be40cf", + "m_Guid": { + "m_GuidSerialized": "41afbdcb-f3ae-4340-8973-1c1998c992a2" + }, + "m_Name": "Outline Offset 2", + "m_DefaultReferenceName": "", + "m_OverrideReferenceName": "_OutlineOffset2", + "m_GeneratePropertyBlock": true, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Texture2DInputMaterialSlot", + "m_ObjectId": "74cf69e61bef44589521f1bf2bf3c59a", + "m_Id": 1, + "m_DisplayName": "Texture", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Texture", + "m_StageCapability": 3, + "m_BareResource": false, + "m_Texture": { + "m_SerializedTexture": "{\"texture\":{\"instanceID\":0}}", + "m_Guid": "" + }, + "m_DefaultType": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector2MaterialSlot", + "m_ObjectId": "757174b6f25040fdbb20355a21752222", + "m_Id": 0, + "m_DisplayName": "Outline Offset 2", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "75aba700d74d4b2687bf3166cf1da3e2", + "m_Id": 2, + "m_DisplayName": "RGBA", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "RGBA", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector2MaterialSlot", + "m_ObjectId": "75c5657544c648058b20cea090f48dbf", + "m_Id": 0, + "m_DisplayName": "_OutlineUVSpeed", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0 + }, + "m_Labels": [ + "X", + "Y" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "767769f736d5478cba5f10a415e28e7f", + "m_Id": 5, + "m_DisplayName": "G", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "G", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicValueMaterialSlot", + "m_ObjectId": "773b90134e894e429203c0c83e80b9de", + "m_Id": 2, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "e00": 0.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 0.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 0.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 0.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "77e28f3e930b4c249145630ec961af95", + "m_Id": 0, + "m_DisplayName": "A", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.Rendering.HighDefinition.ShaderGraph.HDUnlitData", + "m_ObjectId": "77ebd01f5b3149ad810a5acbffc85921", + "m_EnableShadowMatte": false, + "m_DistortionOnly": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BooleanMaterialSlot", + "m_ObjectId": "79147f6986644769b58d9ed64fe771e1", + "m_Id": 0, + "m_DisplayName": "OutlineMode", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": false, + "m_DefaultValue": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.MultiplyNode", + "m_ObjectId": "7984fd094e1147bdabb4e26fbd3d31c8", + "m_Group": { + "m_Id": "ecf16c34d46f4502ac601f0c38c7576b" + }, + "m_Name": "Multiply", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -3244.000244140625, + "y": -3414.0, + "width": 130.0, + "height": 118.00000762939453 + } + }, + "m_Slots": [ + { + "m_Id": "082e9706dffc4c188270980d4e44ce0f" + }, + { + "m_Id": "f2a351a5375c441b8d9ab7e2c9545a77" + }, + { + "m_Id": "41986ac6400d46709d0ef043a67f6b34" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 3, + "m_Type": "UnityEditor.ShaderGraph.Internal.ColorShaderProperty", + "m_ObjectId": "7a046f410ce64aa88438b0bfd412c045", + "m_Guid": { + "m_GuidSerialized": "d47271f5-5a84-47bf-a09e-c825d2aeb013" + }, + "m_Name": "Outline Color 3", + "m_DefaultReferenceName": "Color_551702C5", + "m_OverrideReferenceName": "_OutlineColor3", + "m_GeneratePropertyBlock": true, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": { + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 1.0 + }, + "m_ColorMode": 1 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "7a0f504e4175406dbd8134250f4e350b", + "m_Id": 0, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.SubtractNode", + "m_ObjectId": "7a80e8839f0e4a1d9a6c0814f8793ee6", + "m_Group": { + "m_Id": "42cadae0923e4969b50bbc3f78185934" + }, + "m_Name": "Subtract", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4931.0, + "y": -3452.0, + "width": 130.0, + "height": 117.99999237060547 + } + }, + "m_Slots": [ + { + "m_Id": "6fbdcc5a972b4fa883dc5f21e525a376" + }, + { + "m_Id": "0ba4932e164847878ddb7b7bcff96985" + }, + { + "m_Id": "9178663316db43d582f1c4a127d307c6" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "7acfafd73b8c4dfab8c55c18a887e087", + "m_Id": 4, + "m_DisplayName": "R", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "R", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "7b8a19bd115e4167a25b59cb3218a817", + "m_Id": 0, + "m_DisplayName": "A", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 3, + "m_Value": { + "x": 1.0, + "y": 1.0, + "z": 1.0, + "w": 1.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicValueMaterialSlot", + "m_ObjectId": "7c27ccb2c2dc4ca59c5438c3358630ca", + "m_Id": 0, + "m_DisplayName": "A", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 3, + "m_Value": { + "e00": 0.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 0.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 0.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 0.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.SubtractNode", + "m_ObjectId": "7d7696aa6d184b4fb9c316a9dec37aee", + "m_Group": { + "m_Id": "42cadae0923e4969b50bbc3f78185934" + }, + "m_Name": "Subtract", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4928.0, + "y": -3326.0, + "width": 130.0, + "height": 117.99999237060547 + } + }, + "m_Slots": [ + { + "m_Id": "4d1cb1a475df49f9a148195a65f5453a" + }, + { + "m_Id": "47d020251e9841a5b1f0fd64396026a1" + }, + { + "m_Id": "62bc551cea604e88b7858cc37d96a98a" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.MultiplyNode", + "m_ObjectId": "7d78a616c2754cc28d1f32cf66ade611", + "m_Group": { + "m_Id": "013228b0fdf1424097798f0973a9a4fb" + }, + "m_Name": "Multiply", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -3973.0, + "y": -2796.0, + "width": 130.0, + "height": 117.99999237060547 + } + }, + "m_Slots": [ + { + "m_Id": "d9bcb754db834583b6518c5ed5152114" + }, + { + "m_Id": "861d4258049a4a3e8164f7297090f88e" + }, + { + "m_Id": "a7c06457d7454693a8bc3dc95257b2c2" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "7e0fadb2533f496192c1ad3e78642010", + "m_Group": { + "m_Id": "484b51c50485473b819c4f05087b32d7" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4444.0, + "y": -4188.0, + "width": 173.0, + "height": 34.0 + } + }, + "m_Slots": [ + { + "m_Id": "d48c3871e3064027a10ae9f4babd3be0" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "952d0fa5cd744df0b434cd38e9a90b93" + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BlockNode", + "m_ObjectId": "7f2e6b5f15364ed9835d67d0cf4f8f65", + "m_Group": { + "m_Id": "" + }, + "m_Name": "VertexDescription.Tangent", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -2586.0, + "y": -3592.0, + "width": 200.0, + "height": 41.0 + } + }, + "m_Slots": [ + { + "m_Id": "85ff8667d72947edada4e9fb4ff60559" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SerializedDescriptor": "VertexDescription.Tangent" +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "7f3d71a6c96847c099da45f95aafbecb", + "m_Id": 1, + "m_DisplayName": "G", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "G", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PositionMaterialSlot", + "m_ObjectId": "8036d0e6090b456e9b4ea87227868236", + "m_Id": 0, + "m_DisplayName": "Position", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Position", + "m_StageCapability": 1, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [ + "X", + "Y", + "Z" + ], + "m_Space": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "80e665a5eeb64730a51742f698bf0d48", + "m_Id": 4, + "m_DisplayName": "R", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "R", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "8135ca333f8f4ea78163743e6ec1f55c", + "m_Group": { + "m_Id": "42cadae0923e4969b50bbc3f78185934" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4050.666259765625, + "y": -3139.99951171875, + "width": 121.99999237060547, + "height": 33.999996185302737 + } + }, + "m_Slots": [ + { + "m_Id": "d6a6a119394e4082a11bc024a6e42ef8" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "53073e5ea924459fa6681a4943e9f947" + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicValueMaterialSlot", + "m_ObjectId": "81bdb47901ef48e5a588c6724b1b0142", + "m_Id": 2, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "e00": 0.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 0.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 0.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 0.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.Internal.Vector1ShaderProperty", + "m_ObjectId": "81e8ed0534534674a74263e6161a2a1a", + "m_Guid": { + "m_GuidSerialized": "78aab961-c4a8-41f3-b203-1239c3b33b13" + }, + "m_Name": "Underlay Dilate", + "m_DefaultReferenceName": "Vector1_D48690B9", + "m_OverrideReferenceName": "_UnderlayDilate", + "m_GeneratePropertyBlock": true, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": 0.0, + "m_FloatType": 0, + "m_RangeValues": { + "x": 0.0, + "y": 1.0 + } +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.Internal.Vector1ShaderProperty", + "m_ObjectId": "82af2db1018543d7832af96c1cfc981f", + "m_Guid": { + "m_GuidSerialized": "37906c7b-9a3a-454b-a62a-9aa097e64bde" + }, + "m_Name": "Light Angle", + "m_DefaultReferenceName": "Vector1_82af2db1018543d7832af96c1cfc981f", + "m_OverrideReferenceName": "_LightAngle", + "m_GeneratePropertyBlock": true, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": 0.0, + "m_FloatType": 1, + "m_RangeValues": { + "x": 0.0, + "y": 6.28000020980835 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "82d5443fe54d4a3b9420f8745d00a632", + "m_Id": 5, + "m_DisplayName": "Softness", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Softness", + "m_StageCapability": 3, + "m_Value": 8.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector2MaterialSlot", + "m_ObjectId": "84dc74cdbd8c45e1b189e4fd9a69942d", + "m_Id": 0, + "m_DisplayName": "Outline Offset 3", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.CustomFunctionNode", + "m_ObjectId": "85a1ad8e741e41759002e8cdc8cd0b96", + "m_Group": { + "m_Id": "d0a791a544614667962a9a9a9ce0c68a" + }, + "m_Name": "ScreenSpaceRatio (Custom Function)", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -6112.0, + "y": -3308.0, + "width": 258.0, + "height": 142.0 + } + }, + "m_Slots": [ + { + "m_Id": "6e13f3cd573c467a94379f45d96cb690" + }, + { + "m_Id": "8e6ed600f6504f4083092f5b511e44c4" + }, + { + "m_Id": "93b161cce4504cb79c97b6d8db178de7" + }, + { + "m_Id": "2bf5f2fdd2984599b7323d10cfb1d240" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SourceType": 0, + "m_FunctionName": "ScreenSpaceRatio", + "m_FunctionSource": "96de908384869cd409c75efa351d5edf", + "m_FunctionBody": "Enter function body here..." +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "85b5940eb77e4625812ded7215bab8d7", + "m_Group": { + "m_Id": "42cadae0923e4969b50bbc3f78185934" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4050.666259765625, + "y": -3095.99951171875, + "width": 121.99999237060547, + "height": 33.999996185302737 + } + }, + "m_Slots": [ + { + "m_Id": "ada023d617104472b8ab75a81558c0a1" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "7a046f410ce64aa88438b0bfd412c045" + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.TangentMaterialSlot", + "m_ObjectId": "85ff8667d72947edada4e9fb4ff60559", + "m_Id": 0, + "m_DisplayName": "Tangent", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Tangent", + "m_StageCapability": 1, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [ + "X", + "Y", + "Z" + ], + "m_Space": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicValueMaterialSlot", + "m_ObjectId": "861d4258049a4a3e8164f7297090f88e", + "m_Id": 1, + "m_DisplayName": "B", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 3, + "m_Value": { + "e00": 2.0, + "e01": 2.0, + "e02": 2.0, + "e03": 2.0, + "e10": 2.0, + "e11": 2.0, + "e12": 2.0, + "e13": 2.0, + "e20": 2.0, + "e21": 2.0, + "e22": 2.0, + "e23": 2.0, + "e30": 2.0, + "e31": 2.0, + "e32": 2.0, + "e33": 2.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.Internal.Vector4ShaderProperty", + "m_ObjectId": "867a4ae13c0d4a028c71bc1063824c14", + "m_Guid": { + "m_GuidSerialized": "d483c212-0a30-4f6d-b94d-9abbc83a6522" + }, + "m_Name": "Outline Width", + "m_DefaultReferenceName": "Vector4_C68C9E14", + "m_OverrideReferenceName": "_IsoPerimeter", + "m_GeneratePropertyBlock": true, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 2, + "m_Hidden": false, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicValueMaterialSlot", + "m_ObjectId": "8695190a5e614f2d90081871a8a06fc2", + "m_Id": 1, + "m_DisplayName": "B", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 3, + "m_Value": { + "e00": 2.0, + "e01": 2.0, + "e02": 2.0, + "e03": 2.0, + "e10": 2.0, + "e11": 2.0, + "e12": 2.0, + "e13": 2.0, + "e20": 2.0, + "e21": 2.0, + "e22": 2.0, + "e23": 2.0, + "e30": 2.0, + "e31": 2.0, + "e32": 2.0, + "e33": 2.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "8764669016f6442f8152593c18a649d7", + "m_Id": 4, + "m_DisplayName": "RGBA", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "RGBA", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicValueMaterialSlot", + "m_ObjectId": "880bb02c6c6b49b18aa6ebc66dc566a0", + "m_Id": 0, + "m_DisplayName": "A", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 3, + "m_Value": { + "e00": 0.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 0.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 0.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 0.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.CustomFunctionNode", + "m_ObjectId": "88253223d2c34ecfab92b0c344048f94", + "m_Group": { + "m_Id": "484b51c50485473b819c4f05087b32d7" + }, + "m_Name": "ComputeSDF (Custom Function)", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4226.0, + "y": -4323.0, + "width": 227.99998474121095, + "height": 190.0 + } + }, + "m_Slots": [ + { + "m_Id": "c52a1744a9a14989b0ae452ad6de6061" + }, + { + "m_Id": "a03db80c558b4f87a330c5ae0a9443a5" + }, + { + "m_Id": "8f1b1d1e8ff24b3284993e52354e54fa" + }, + { + "m_Id": "5da82bf481f8489ebd05e997f617f51b" + }, + { + "m_Id": "82d5443fe54d4a3b9420f8745d00a632" + }, + { + "m_Id": "61133d79a89048c195f54939b2a1d30a" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SourceType": 0, + "m_FunctionName": "ComputeSDF", + "m_FunctionSource": "96de908384869cd409c75efa351d5edf", + "m_FunctionBody": "Enter function body here..." +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector2MaterialSlot", + "m_ObjectId": "8902cb30b1684db8b996562e0140cb18", + "m_Id": 0, + "m_DisplayName": "UV_1", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "UV_1", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector2MaterialSlot", + "m_ObjectId": "8a08179f99d649d289b8053d5fa0ad22", + "m_Id": 0, + "m_DisplayName": "Underlay Offset", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0 + }, + "m_Labels": [ + "X", + "Y" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "8b66f4e6bc9d4662b3218ac33a69839f", + "m_Id": 5, + "m_DisplayName": "G", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "G", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "8c38a5d8327f456e9783740c05382619", + "m_Id": 3, + "m_DisplayName": "Color2", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Color2", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "8cbd81814903479ea1d3151c1f38183e", + "m_Id": 6, + "m_DisplayName": "B", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 3, + "m_Type": "UnityEditor.ShaderGraph.Internal.ColorShaderProperty", + "m_ObjectId": "8cf8aae64c1d443f9303126886b40f17", + "m_Guid": { + "m_GuidSerialized": "8d78c9a5-aaef-41fb-af68-2358e401d7ac" + }, + "m_Name": "_UnderlayColor", + "m_DefaultReferenceName": "Color_2F5FE804", + "m_OverrideReferenceName": "_UnderlayColor", + "m_GeneratePropertyBlock": true, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": { + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 1.0 + }, + "m_ColorMode": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector2MaterialSlot", + "m_ObjectId": "8e6ed600f6504f4083092f5b511e44c4", + "m_Id": 0, + "m_DisplayName": "UV", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "UV", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0 + }, + "m_Labels": [ + "X", + "Y" + ] +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.Internal.Vector2ShaderProperty", + "m_ObjectId": "8ed907a2cc7949b68a283ae243ea1977", + "m_Guid": { + "m_GuidSerialized": "36803443-a9bc-4f3c-a4f2-7d66a5417ac1" + }, + "m_Name": "Outline Offset 3", + "m_DefaultReferenceName": "", + "m_OverrideReferenceName": "_OutlineOffset3", + "m_GeneratePropertyBlock": true, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "8f1b1d1e8ff24b3284993e52354e54fa", + "m_Id": 3, + "m_DisplayName": "SDR", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "SDR", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "9147636b0cfa466a9b37a013d8f693bf", + "m_Group": { + "m_Id": "daaf032a109749a88c9b8ff8e1f8b541" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -5567.0, + "y": -3862.000244140625, + "width": 153.0, + "height": 34.0 + } + }, + "m_Slots": [ + { + "m_Id": "a4f471e3221c4134b291bd9d2ba22db6" + } + ], + "synonyms": [], + "m_Precision": 1, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "a6bbb32e8d884be9bb36db91fe4b81b1" + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "9178663316db43d582f1c4a127d307c6", + "m_Id": 2, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.SplitNode", + "m_ObjectId": "91890fe48ebe4717aea61ecaf3ad4861", + "m_Group": { + "m_Id": "ecf16c34d46f4502ac601f0c38c7576b" + }, + "m_Name": "Split", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -3114.000244140625, + "y": -3414.0, + "width": 120.00000762939453, + "height": 149.00001525878907 + } + }, + "m_Slots": [ + { + "m_Id": "3dccd64e7f324bc1a75c1479d7a67c51" + }, + { + "m_Id": "e444f2c81d1e48329fa2c91005277e8d" + }, + { + "m_Id": "b2c26292b7434733878a9b042f44de89" + }, + { + "m_Id": "964fea1fd4b24f4daf5bef84c4b45118" + }, + { + "m_Id": "deac82280a2b43078e0e40863e2d974c" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "91d6a9a5fbc04ea49075cb51835e7264", + "m_Id": 2, + "m_DisplayName": "B", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "928621a3ca2d41c89a10336bbbc81ddc", + "m_Id": 5, + "m_DisplayName": "G", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "G", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "93b161cce4504cb79c97b6d8db178de7", + "m_Id": 3, + "m_DisplayName": "TextureSize", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "TextureSize", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.Rendering.Universal.ShaderGraph.UniversalTarget", + "m_ObjectId": "94300469581b4924ac7dda496811d45d", + "m_ActiveSubTarget": { + "m_Id": "0eeb5490760e492f8c9691086fa00929" + }, + "m_SurfaceType": 1, + "m_AlphaMode": 0, + "m_TwoSided": true, + "m_AlphaClip": true, + "m_CustomEditorGUI": "TMPro.EditorUtilities.TMP_SDFShaderGUI" +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "945b45993dd84a979755b98c48138f72", + "m_Id": 0, + "m_DisplayName": "Width", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Width", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.Internal.Vector1ShaderProperty", + "m_ObjectId": "952d0fa5cd744df0b434cd38e9a90b93", + "m_Guid": { + "m_GuidSerialized": "ce395871-ddeb-47c3-a31d-07855800c197" + }, + "m_Name": "_UnderlaySoftness", + "m_DefaultReferenceName": "Vector1_F2B9E3EF", + "m_OverrideReferenceName": "_UnderlaySoftness", + "m_GeneratePropertyBlock": true, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": 0.0, + "m_FloatType": 0, + "m_RangeValues": { + "x": 0.0, + "y": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "95928bcb6a284b8d88105a84c2e1d3ce", + "m_Group": { + "m_Id": "013228b0fdf1424097798f0973a9a4fb" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4744.0, + "y": -2591.0, + "width": 155.0, + "height": 34.0 + } + }, + "m_Slots": [ + { + "m_Id": "d880558893fb442b9320cf55885d1117" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "2d0a269511e34bd1ba9056d2c939dff2" + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "964fea1fd4b24f4daf5bef84c4b45118", + "m_Id": 3, + "m_DisplayName": "B", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.GroupData", + "m_ObjectId": "98934a69591249d5b8b92b39045359a3", + "m_Title": "Outline1 Texture", + "m_Position": { + "x": -4746.0, + "y": -2497.0 + } +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.Internal.Vector1ShaderProperty", + "m_ObjectId": "998db5e5901e45b29040eb2099370071", + "m_Guid": { + "m_GuidSerialized": "6f383614-f2ad-4269-be8f-87b0ecb03cf0" + }, + "m_Name": "Bevel Clamp", + "m_DefaultReferenceName": "Vector1_5BD7E808", + "m_OverrideReferenceName": "_BevelClamp", + "m_GeneratePropertyBlock": true, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": 0.0, + "m_FloatType": 1, + "m_RangeValues": { + "x": 0.0, + "y": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.SampleTexture2DNode", + "m_ObjectId": "9c228fac287d446296b91a4acf5cec59", + "m_Group": { + "m_Id": "42cadae0923e4969b50bbc3f78185934" + }, + "m_Name": "Sample Texture 2D", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4569.0, + "y": -3498.000244140625, + "width": 184.0, + "height": 253.0 + } + }, + "m_Slots": [ + { + "m_Id": "582d6e289dbe4fdca7cf0307273eaa2f" + }, + { + "m_Id": "1db37082bf844442804487b4944352de" + }, + { + "m_Id": "8b66f4e6bc9d4662b3218ac33a69839f" + }, + { + "m_Id": "4a66dcbe712a4d40bd8f355b834594b5" + }, + { + "m_Id": "a0285c9c381a49cba194709efa0a7c85" + }, + { + "m_Id": "b2728d0dd3ce40678867c94a7d977916" + }, + { + "m_Id": "e141833aa78b4fd59ecad949beb43a78" + }, + { + "m_Id": "51f76f8a53ad43a4ad028426548ce9ba" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_TextureType": 0, + "m_NormalMapSpace": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "9c26fdddba244d36a854298c00473247", + "m_Id": 3, + "m_DisplayName": "SDR", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "SDR", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.UVNode", + "m_ObjectId": "9d3c3383d5934a17bf9efbb7fd9e9043", + "m_Group": { + "m_Id": "42cadae0923e4969b50bbc3f78185934" + }, + "m_Name": "UV", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -5412.0, + "y": -3315.0, + "width": 145.0, + "height": 130.0 + } + }, + "m_Slots": [ + { + "m_Id": "232b1aa09e67479abae141d3c76d3c5b" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_OutputChannel": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "9e6e50a71d9843b49b62ebe1cf7d3d59", + "m_Group": { + "m_Id": "d258902c6ec74942afdb9ebf8c1d07f8" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4486.0, + "y": -3865.99951171875, + "width": 135.3330078125, + "height": 33.999996185302737 + } + }, + "m_Slots": [ + { + "m_Id": "3535ae87c6dd4769b52b20d9eca61069" + } + ], + "synonyms": [], + "m_Precision": 1, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "3e372195f4bd4845852a37839e5b602d" + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "9e87ce9607e14015a3790c528ca5dfda", + "m_Group": { + "m_Id": "98934a69591249d5b8b92b39045359a3" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4598.0, + "y": -2251.0, + "width": 167.00001525878907, + "height": 34.0 + } + }, + "m_Slots": [ + { + "m_Id": "75c5657544c648058b20cea090f48dbf" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "3fdf4b7bc5d4426492dcc057603ef4a6" + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicValueMaterialSlot", + "m_ObjectId": "9eb8137a6c2e41bbafdc8b0732dd47a3", + "m_Id": 0, + "m_DisplayName": "A", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 3, + "m_Value": { + "e00": 0.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 0.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 0.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 0.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BooleanMaterialSlot", + "m_ObjectId": "9eeec1a9713045af8845cea263d5ea48", + "m_Id": 6, + "m_DisplayName": "IsFront", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "IsFront", + "m_StageCapability": 3, + "m_Value": false, + "m_DefaultValue": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.MultiplyNode", + "m_ObjectId": "9f0de188085746d5a19073da1de85ddb", + "m_Group": { + "m_Id": "013228b0fdf1424097798f0973a9a4fb" + }, + "m_Name": "Multiply", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4118.0, + "y": -2771.0, + "width": 130.0, + "height": 117.99999237060547 + } + }, + "m_Slots": [ + { + "m_Id": "7c27ccb2c2dc4ca59c5438c3358630ca" + }, + { + "m_Id": "373f1de8db6c429c9d46c781f741d7a4" + }, + { + "m_Id": "fd0b096ed5b74f9e9ec51327be200731" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "a0285c9c381a49cba194709efa0a7c85", + "m_Id": 7, + "m_DisplayName": "A", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "a03db80c558b4f87a330c5ae0a9443a5", + "m_Id": 1, + "m_DisplayName": "SD", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "SD", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.NormalMaterialSlot", + "m_ObjectId": "a3f8b6e8ae7f48e2989a029904401502", + "m_Id": 0, + "m_DisplayName": "Normal", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Normal", + "m_StageCapability": 1, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [ + "X", + "Y", + "Z" + ], + "m_Space": 0 +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.CustomFunctionNode", + "m_ObjectId": "a455bd79094c4413a7b7dd80ca8b9368", + "m_Group": { + "m_Id": "013228b0fdf1424097798f0973a9a4fb" + }, + "m_Name": "GenerateUV (Custom Function)", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4573.0, + "y": -2689.0, + "width": 222.0, + "height": 142.0 + } + }, + "m_Slots": [ + { + "m_Id": "4e90ca54c0cc46a18ea600be7c80413a" + }, + { + "m_Id": "2c7a9460724b47daad8df1be144de7c6" + }, + { + "m_Id": "55ffa45ec3654d5e88089fb40d2b0465" + }, + { + "m_Id": "e495a9f7a11f4eb89334e83be154ceb9" + } + ], + "synonyms": [], + "m_Precision": 1, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SourceType": 0, + "m_FunctionName": "GenerateUV", + "m_FunctionSource": "96de908384869cd409c75efa351d5edf", + "m_FunctionBody": "Enter function body here..." +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.SamplerStateShaderProperty", + "m_ObjectId": "a4ad98d8828c424384229c344ebe2ed0", + "m_Guid": { + "m_GuidSerialized": "f98fc1a2-bb81-4bd1-a207-23d3a90d518e" + }, + "m_Name": "SamplerState", + "m_DefaultReferenceName": "", + "m_OverrideReferenceName": "SamplerState_Linear_Clamp", + "m_GeneratePropertyBlock": false, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": { + "m_filter": 0, + "m_wrap": 1 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "a4f471e3221c4134b291bd9d2ba22db6", + "m_Id": 0, + "m_DisplayName": "_GradientScale", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "a535f3bcbeb14622bb177eb6f46e76f4", + "m_Group": { + "m_Id": "98934a69591249d5b8b92b39045359a3" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4608.0, + "y": -2293.0, + "width": 177.00001525878907, + "height": 34.0 + } + }, + "m_Slots": [ + { + "m_Id": "6dfc1177dd0541a7a780fbf911ad1956" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "ec79eb447dfd47a9b3380344c6a60f43" + } +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.Internal.Vector1ShaderProperty", + "m_ObjectId": "a6bbb32e8d884be9bb36db91fe4b81b1", + "m_Guid": { + "m_GuidSerialized": "6aa76edf-7b80-46ac-add4-406cf1d85493" + }, + "m_Name": "_GradientScale", + "m_DefaultReferenceName": "Vector1_EAE27356", + "m_OverrideReferenceName": "_GradientScale", + "m_GeneratePropertyBlock": true, + "m_Precision": 1, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": 10.0, + "m_FloatType": 0, + "m_RangeValues": { + "x": 0.0, + "y": 1.0 + } +} + +{ + "m_SGVersion": 3, + "m_Type": "UnityEditor.ShaderGraph.Internal.ColorShaderProperty", + "m_ObjectId": "a6c38edd2e8743a9b057ba8452b9f129", + "m_Guid": { + "m_GuidSerialized": "9fc942ee-4a1d-4ced-a5a6-81893e3ddb63" + }, + "m_Name": "Light Color", + "m_DefaultReferenceName": "Color_a6c38edd2e8743a9b057ba8452b9f129", + "m_OverrideReferenceName": "_SpecularColor", + "m_GeneratePropertyBlock": true, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": { + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "m_ColorMode": 1 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "a75f7ac601c446469802fe7754c1f279", + "m_Id": 0, + "m_DisplayName": "Color1", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Color1", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "a7942746b5564dc7bbbae1deb2403022", + "m_Id": 0, + "m_DisplayName": "_GradientScale", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicValueMaterialSlot", + "m_ObjectId": "a7c06457d7454693a8bc3dc95257b2c2", + "m_Id": 2, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "e00": 0.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 0.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 0.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 0.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.Rendering.HighDefinition.ShaderGraph.LightingData", + "m_ObjectId": "a8c49a47cb934f7e8e4d88fce06df6ff", + "m_NormalDropOffSpace": 0, + "m_BlendPreserveSpecular": true, + "m_ReceiveDecals": true, + "m_ReceiveSSR": true, + "m_ReceiveSSRTransparent": false, + "m_SpecularAA": false, + "m_SpecularOcclusionMode": 0, + "m_OverrideBakedGI": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "aa2794b8f0e24bf281d22e0fef0647be", + "m_Id": 2, + "m_DisplayName": "B", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.CustomFunctionNode", + "m_ObjectId": "aa3e347d733e48f7b65d8a8847370eec", + "m_Group": { + "m_Id": "" + }, + "m_Name": "EvaluateLight (Custom Function)", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -3633.000244140625, + "y": -3805.000244140625, + "width": 179.00001525878907, + "height": 118.00000762939453 + } + }, + "m_Slots": [ + { + "m_Id": "0699eea947fc426cbfeb8744cf120222" + }, + { + "m_Id": "0c4dc51f26484c26ad88a3fe4002abcd" + }, + { + "m_Id": "d5173cc3c6cd4f1998550f3187a3e9c8" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SourceType": 0, + "m_FunctionName": "EvaluateLight", + "m_FunctionSource": "96de908384869cd409c75efa351d5edf", + "m_FunctionBody": "Enter function body here..." +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "aa87c72ac0e64469acc34f936f00b3d0", + "m_Group": { + "m_Id": "484b51c50485473b819c4f05087b32d7" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4444.0, + "y": -4225.0, + "width": 193.0, + "height": 34.0 + } + }, + "m_Slots": [ + { + "m_Id": "0d7878dd226d4cfb81a991dc312309fc" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "81e8ed0534534674a74263e6161a2a1a" + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "abd59150589b436cadf8c9e6f43ccb8e", + "m_Id": 0, + "m_DisplayName": "RGBA", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "RGBA", + "m_StageCapability": 2, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BlockNode", + "m_ObjectId": "aca823a8188948c782eddaf0f45e1868", + "m_Group": { + "m_Id": "" + }, + "m_Name": "SurfaceDescription.NormalOS", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -2542.0, + "y": -3404.000244140625, + "width": 200.0, + "height": 40.66650390625 + } + }, + "m_Slots": [ + { + "m_Id": "e386b183a18245a796b024022f7f3074" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SerializedDescriptor": "SurfaceDescription.NormalOS" +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Texture2DPropertiesNode", + "m_ObjectId": "acd0cd5a177f4a97bf23db7219305e3f", + "m_Group": { + "m_Id": "d258902c6ec74942afdb9ebf8c1d07f8" + }, + "m_Name": "Texel Size", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4348.0, + "y": -3905.99951171875, + "width": 185.33299255371095, + "height": 101.33324432373047 + } + }, + "m_Slots": [ + { + "m_Id": "945b45993dd84a979755b98c48138f72" + }, + { + "m_Id": "e51a636b2621440eb94cc802c1cf4bfc" + }, + { + "m_Id": "1bdde3efd3b7464b8934c555be0f8a48" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "ada023d617104472b8ab75a81558c0a1", + "m_Id": 0, + "m_DisplayName": "Outline Color 3", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "aef5c44f84e04c3185e0b93e95e34204", + "m_Group": { + "m_Id": "42cadae0923e4969b50bbc3f78185934" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -5233.99951171875, + "y": -3141.999755859375, + "width": 143.99998474121095, + "height": 33.999996185302737 + } + }, + "m_Slots": [ + { + "m_Id": "84dc74cdbd8c45e1b189e4fd9a69942d" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "8ed907a2cc7949b68a283ae243ea1977" + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Texture2DInputMaterialSlot", + "m_ObjectId": "b000f852aa984e9dae25b125a4607f4e", + "m_Id": 1, + "m_DisplayName": "Texture", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Texture", + "m_StageCapability": 3, + "m_BareResource": false, + "m_Texture": { + "m_SerializedTexture": "{\"texture\":{\"instanceID\":0}}", + "m_Guid": "" + }, + "m_DefaultType": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "b015d1b7e4134c59baf6851e7649802c", + "m_Id": 0, + "m_DisplayName": "R", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "R", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.Internal.Vector1ShaderProperty", + "m_ObjectId": "b0b352c4503a43d083a64e57352b29a0", + "m_Guid": { + "m_GuidSerialized": "01cfcc78-60aa-4f71-a1e3-8d8df6dae253" + }, + "m_Name": "Reflectivity Power", + "m_DefaultReferenceName": "Vector1_b0b352c4503a43d083a64e57352b29a0", + "m_OverrideReferenceName": "_Reflectivity", + "m_GeneratePropertyBlock": true, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": 5.0, + "m_FloatType": 1, + "m_RangeValues": { + "x": 5.0, + "y": 15.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.VertexColorNode", + "m_ObjectId": "b1188549725543d485436c2e921ffbb2", + "m_Group": { + "m_Id": "013228b0fdf1424097798f0973a9a4fb" + }, + "m_Name": "Vertex Color", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4108.0, + "y": -2890.0, + "width": 116.0, + "height": 94.0 + } + }, + "m_Slots": [ + { + "m_Id": "281bcee4777040f8a31ee0e10344e98d" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 2, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.SampleTexture2DNode", + "m_ObjectId": "b163c9f1666644b0bba62cf0e12df7bc", + "m_Group": { + "m_Id": "013228b0fdf1424097798f0973a9a4fb" + }, + "m_Name": "Sample Texture 2D", + "m_DrawState": { + "m_Expanded": false, + "m_Position": { + "serializedVersion": "2", + "x": -4333.0, + "y": -2713.0, + "width": 180.0, + "height": 180.0 + } + }, + "m_Slots": [ + { + "m_Id": "cce40479b6284b6fa3174db9f09d0ac9" + }, + { + "m_Id": "80e665a5eeb64730a51742f698bf0d48" + }, + { + "m_Id": "1f46181633594ae0a1fb2adb76b42981" + }, + { + "m_Id": "8cbd81814903479ea1d3151c1f38183e" + }, + { + "m_Id": "cfaf3f3a5a1146e194cddad30c95aada" + }, + { + "m_Id": "b43489e37a5c4df88f15844292a55ec7" + }, + { + "m_Id": "cd7281fb41aa4e61ac0fdf71d4f4bd46" + }, + { + "m_Id": "f01d52cdcb1647aab35782b4af535efd" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_TextureType": 0, + "m_NormalMapSpace": 1 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicValueMaterialSlot", + "m_ObjectId": "b224a1cf80604103ad085c799995f3c2", + "m_Id": 2, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "e00": 0.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 0.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 0.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 0.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Texture2DInputMaterialSlot", + "m_ObjectId": "b2728d0dd3ce40678867c94a7d977916", + "m_Id": 1, + "m_DisplayName": "Texture", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Texture", + "m_StageCapability": 3, + "m_BareResource": false, + "m_Texture": { + "m_SerializedTexture": "{\"texture\":{\"fileID\":-2362172177983852347,\"guid\":\"dda5bcb0d1e9515498f6e4e038bbefe6\",\"type\":2}}", + "m_Guid": "" + }, + "m_DefaultType": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "b2baf44eae52473cb6cda7b1debece01", + "m_Id": 0, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "b2c26292b7434733878a9b042f44de89", + "m_Id": 2, + "m_DisplayName": "G", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "G", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "b42e6dbfbc864097af182cbff5c0c1fb", + "m_Id": 0, + "m_DisplayName": "Outline Color 1", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Texture2DInputMaterialSlot", + "m_ObjectId": "b43489e37a5c4df88f15844292a55ec7", + "m_Id": 1, + "m_DisplayName": "Texture", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Texture", + "m_StageCapability": 3, + "m_BareResource": false, + "m_Texture": { + "m_SerializedTexture": "{\"texture\":{\"fileID\":-2362172177983852347,\"guid\":\"dda5bcb0d1e9515498f6e4e038bbefe6\",\"type\":2}}", + "m_Guid": "" + }, + "m_DefaultType": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.MultiplyNode", + "m_ObjectId": "b4a40cb6acd441acb83cfe0240bf910d", + "m_Group": { + "m_Id": "484b51c50485473b819c4f05087b32d7" + }, + "m_Name": "Multiply", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4750.99951171875, + "y": -4274.0, + "width": 130.0, + "height": 118.0 + } + }, + "m_Slots": [ + { + "m_Id": "d0b10e52e21941b183f5f635894c76c8" + }, + { + "m_Id": "0d6a57754b824f6db9cefa6953bc06a9" + }, + { + "m_Id": "773b90134e894e429203c0c83e80b9de" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Texture2DPropertiesNode", + "m_ObjectId": "b571db753a1948d5a6f1de4e7d0c7238", + "m_Group": { + "m_Id": "daaf032a109749a88c9b8ff8e1f8b541" + }, + "m_Name": "Texel Size", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -5727.0, + "y": -3827.000244140625, + "width": 184.0, + "height": 101.0 + } + }, + "m_Slots": [ + { + "m_Id": "5b3ff4ee364f4d7a923b530ad60d8762" + }, + { + "m_Id": "c183b5bd9bbe45089f93996e73110918" + }, + { + "m_Id": "1196ae398cc348349ab0c1a23fdab4bd" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "b691728a389a417d9b4f2d02541209c2", + "m_Id": 6, + "m_DisplayName": "B", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "b7f9ac55517141868bfb9d2ad6429792", + "m_Id": 6, + "m_DisplayName": "B", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "b85d677872b44421bf5536f42ba0267c", + "m_Id": 3, + "m_DisplayName": "Color0", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Color0", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.CombineNode", + "m_ObjectId": "bc9afcb18afa4ccc82d2cdc34d3f4641", + "m_Group": { + "m_Id": "daaf032a109749a88c9b8ff8e1f8b541" + }, + "m_Name": "Combine", + "m_DrawState": { + "m_Expanded": false, + "m_Position": { + "serializedVersion": "2", + "x": -5537.0, + "y": -3827.000244140625, + "width": 126.0, + "height": 118.0 + } + }, + "m_Slots": [ + { + "m_Id": "5e42524569844befad16fda5a94eb9cb" + }, + { + "m_Id": "54d7a93ffec5490aa4591da23a21b693" + }, + { + "m_Id": "aa2794b8f0e24bf281d22e0fef0647be" + }, + { + "m_Id": "200245fc8bbe4826b209ab5f7ffe074c" + }, + { + "m_Id": "fc2e62201c5847e798fd939314413fcd" + }, + { + "m_Id": "fe11fa80cc1847a5a37f6757d521cf25" + }, + { + "m_Id": "de0c6f7f7af94defa6c3dbc6433de9d4" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "c183b5bd9bbe45089f93996e73110918", + "m_Id": 2, + "m_DisplayName": "Height", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Height", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.CustomFunctionNode", + "m_ObjectId": "c234e5216678436195ee1a5914bc79da", + "m_Group": { + "m_Id": "98934a69591249d5b8b92b39045359a3" + }, + "m_Name": "GenerateUV (Custom Function)", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4409.0, + "y": -2338.0, + "width": 222.0, + "height": 142.00001525878907 + } + }, + "m_Slots": [ + { + "m_Id": "8902cb30b1684db8b996562e0140cb18" + }, + { + "m_Id": "3db1608e927e4102a3c3a88e9fcab39a" + }, + { + "m_Id": "0f7ffb6d2de4447f9736780cbcee8e07" + }, + { + "m_Id": "d4954b7bbbb0412cbc997bcbe7dfa808" + } + ], + "synonyms": [], + "m_Precision": 1, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SourceType": 0, + "m_FunctionName": "GenerateUV", + "m_FunctionSource": "96de908384869cd409c75efa351d5edf", + "m_FunctionBody": "Enter function body here..." +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.UVMaterialSlot", + "m_ObjectId": "c35312edaa2344788b1964ee2f63a236", + "m_Id": 2, + "m_DisplayName": "UV", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "UV", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0 + }, + "m_Labels": [], + "m_Channel": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Texture2DMaterialSlot", + "m_ObjectId": "c3e6d7c20c184bf39fd8822130e693e7", + "m_Id": 0, + "m_DisplayName": "_MainTex", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_BareResource": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector2MaterialSlot", + "m_ObjectId": "c422a9a9ff824176aad2241f58c44d0b", + "m_Id": 0, + "m_DisplayName": "Outline Offset 1", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "c478c32c45884c57a62f7b2aa8ddc3b0", + "m_Id": 2, + "m_DisplayName": "Alpha", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Alpha", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "c52a1744a9a14989b0ae452ad6de6061", + "m_Id": 0, + "m_DisplayName": "SSR", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "SSR", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "c6bdb985bc16435fa72f5a3c81bb633c", + "m_Id": 6, + "m_DisplayName": "B", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "c7d4094601ac4bc1aead609c72b1f1c1", + "m_Id": 4, + "m_DisplayName": "R", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "R", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "c7ddee91dc5b48dc828309c77fdb0b88", + "m_Group": { + "m_Id": "484b51c50485473b819c4f05087b32d7" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4444.0, + "y": -4266.0, + "width": 153.0, + "height": 34.0 + } + }, + "m_Slots": [ + { + "m_Id": "a7942746b5564dc7bbbae1deb2403022" + } + ], + "synonyms": [], + "m_Precision": 1, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "a6bbb32e8d884be9bb36db91fe4b81b1" + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.SamplerStateMaterialSlot", + "m_ObjectId": "c88fcbaeea954a5f9c68c339fa8b604d", + "m_Id": 3, + "m_DisplayName": "Sampler", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Sampler", + "m_StageCapability": 3, + "m_BareResource": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "c9b722d107ce4cd6a748c883472b9b0f", + "m_Id": 7, + "m_DisplayName": "A", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "c9d7f0dbae7d422985a1cc87c025e76b", + "m_Group": { + "m_Id": "42cadae0923e4969b50bbc3f78185934" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4284.0, + "y": -3165.0, + "width": 144.0, + "height": 34.0 + } + }, + "m_Slots": [ + { + "m_Id": "79147f6986644769b58d9ed64fe771e1" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "cb3c0c3f08654b068bea44c4ffb15f4a" + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Internal.Texture2DShaderProperty", + "m_ObjectId": "c9ec735d1a1046769e5601b2c97c849a", + "m_Guid": { + "m_GuidSerialized": "281a9526-c332-4471-a44e-ece4a1e95ef6" + }, + "m_Name": "Face Texture", + "m_DefaultReferenceName": "Texture2D_75569DEA", + "m_OverrideReferenceName": "_FaceTex", + "m_GeneratePropertyBlock": true, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": { + "m_SerializedTexture": "{\"texture\":{\"instanceID\":0}}", + "m_Guid": "" + }, + "m_Modifiable": true, + "m_DefaultType": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "ca2a1083dc014f39ab8af0cdf140866b", + "m_Id": 0, + "m_DisplayName": "_FaceTex_ST", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Internal.BooleanShaderProperty", + "m_ObjectId": "cb3c0c3f08654b068bea44c4ffb15f4a", + "m_Guid": { + "m_GuidSerialized": "21009d12-8d94-4273-b0d0-a8ee0608ddcf" + }, + "m_Name": "OutlineMode", + "m_DefaultReferenceName": "Boolean_cb3c0c3f08654b068bea44c4ffb15f4a", + "m_OverrideReferenceName": "_OutlineMode", + "m_GeneratePropertyBlock": true, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.SamplerStateMaterialSlot", + "m_ObjectId": "cb5e9f9567e84f8fa5463efc0e256e19", + "m_Id": 3, + "m_DisplayName": "Sampler", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Sampler", + "m_StageCapability": 3, + "m_BareResource": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BlockNode", + "m_ObjectId": "cb7117ecb1d047a8b2cb00ed552cb181", + "m_Group": { + "m_Id": "" + }, + "m_Name": "SurfaceDescription.Alpha", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -3032.66650390625, + "y": -3029.33349609375, + "width": 200.0, + "height": 41.33349609375 + } + }, + "m_Slots": [ + { + "m_Id": "724e17584e97443e9e285dfa7253c8e3" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SerializedDescriptor": "SurfaceDescription.Alpha" +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "cc88101667c9488f9c5a716e851c1b21", + "m_Id": 3, + "m_DisplayName": "Color0", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Color0", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "cce40479b6284b6fa3174db9f09d0ac9", + "m_Id": 0, + "m_DisplayName": "RGBA", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "RGBA", + "m_StageCapability": 2, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.UVMaterialSlot", + "m_ObjectId": "cd7281fb41aa4e61ac0fdf71d4f4bd46", + "m_Id": 2, + "m_DisplayName": "UV", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "UV", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0 + }, + "m_Labels": [ + "X", + "Y" + ], + "m_Channel": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.SamplerStateMaterialSlot", + "m_ObjectId": "cda5e3b4c1054bf3a65c0b7ec6bc778a", + "m_Id": 3, + "m_DisplayName": "Sampler", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Sampler", + "m_StageCapability": 3, + "m_BareResource": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.SampleTexture2DNode", + "m_ObjectId": "cdddee3a537c464697357f11b966f9b8", + "m_Group": { + "m_Id": "484b51c50485473b819c4f05087b32d7" + }, + "m_Name": "Sample Texture 2D", + "m_DrawState": { + "m_Expanded": false, + "m_Position": { + "serializedVersion": "2", + "x": -4420.0, + "y": -4483.0, + "width": 156.0, + "height": 181.0 + } + }, + "m_Slots": [ + { + "m_Id": "41b9b79b3859472882bcea393703eec0" + }, + { + "m_Id": "c7d4094601ac4bc1aead609c72b1f1c1" + }, + { + "m_Id": "767769f736d5478cba5f10a415e28e7f" + }, + { + "m_Id": "b691728a389a417d9b4f2d02541209c2" + }, + { + "m_Id": "045c4f6b050549c7a0efb208e6349779" + }, + { + "m_Id": "509e6f38505b4b0695b263706a55028f" + }, + { + "m_Id": "204dacb5a95b424facf11cb6f65bd188" + }, + { + "m_Id": "35cbea6373dd4e4f8d0fea36e8add392" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_TextureType": 0, + "m_NormalMapSpace": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "cfaf3f3a5a1146e194cddad30c95aada", + "m_Id": 7, + "m_DisplayName": "A", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.GroupData", + "m_ObjectId": "d0a791a544614667962a9a9a9ce0c68a", + "m_Title": "Screen Space Ratio", + "m_Position": { + "x": -6485.591796875, + "y": -3365.3779296875 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicValueMaterialSlot", + "m_ObjectId": "d0b10e52e21941b183f5f635894c76c8", + "m_Id": 0, + "m_DisplayName": "A", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 3, + "m_Value": { + "e00": 0.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 0.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 0.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 0.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "d1a17e42e7a04dc38984e3c01149445b", + "m_Id": 7, + "m_DisplayName": "A", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "d219977210094c0082c517d8dc00c8bb", + "m_Id": 0, + "m_DisplayName": "RGBA", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "RGBA", + "m_StageCapability": 2, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.GroupData", + "m_ObjectId": "d258902c6ec74942afdb9ebf8c1d07f8", + "m_Title": "Generate Normal", + "m_Position": { + "x": -4511.33349609375, + "y": -3999.3330078125 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.UVMaterialSlot", + "m_ObjectId": "d30452ac6b244ecca03df4d7b4de9f81", + "m_Id": 2, + "m_DisplayName": "UV", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "UV", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0 + }, + "m_Labels": [], + "m_Channel": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "d48c3871e3064027a10ae9f4babd3be0", + "m_Id": 0, + "m_DisplayName": "_UnderlaySoftness", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector2MaterialSlot", + "m_ObjectId": "d4954b7bbbb0412cbc997bcbe7dfa808", + "m_Id": 2, + "m_DisplayName": "UV", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "UV", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0 + }, + "m_Labels": [ + "X", + "Y" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "d4df208fc23b42f2b52364124f1b661c", + "m_Group": { + "m_Id": "42cadae0923e4969b50bbc3f78185934" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -5236.99951171875, + "y": -3260.999755859375, + "width": 143.99998474121095, + "height": 33.999996185302737 + } + }, + "m_Slots": [ + { + "m_Id": "757174b6f25040fdbb20355a21752222" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "74b41464cbed4e9e8e23af5ab9be40cf" + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector3MaterialSlot", + "m_ObjectId": "d5173cc3c6cd4f1998550f3187a3e9c8", + "m_Id": 0, + "m_DisplayName": "Normal", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Normal", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [ + "X", + "Y", + "Z" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "d6a6a119394e4082a11bc024a6e42ef8", + "m_Id": 0, + "m_DisplayName": "Outline Color 2", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector2MaterialSlot", + "m_ObjectId": "d880558893fb442b9320cf55885d1117", + "m_Id": 0, + "m_DisplayName": "_FaceUVSpeed", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0 + }, + "m_Labels": [ + "X", + "Y" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "d8edec16956c4f15b7d51d6ec10753f4", + "m_Id": 2, + "m_DisplayName": "B", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicValueMaterialSlot", + "m_ObjectId": "d9bcb754db834583b6518c5ed5152114", + "m_Id": 0, + "m_DisplayName": "A", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 3, + "m_Value": { + "e00": 0.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 0.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 0.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 0.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "d9dc4839ee2847999110bdb234d6041a", + "m_Id": 1, + "m_DisplayName": "G", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "G", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Texture2DMaterialSlot", + "m_ObjectId": "da7a06d393a44089842070d51d2aa0a6", + "m_Id": 0, + "m_DisplayName": "_MainTex", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_BareResource": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.GroupData", + "m_ObjectId": "daaf032a109749a88c9b8ff8e1f8b541", + "m_Title": "Offset Scale", + "m_Position": { + "x": -5893.0, + "y": -3921.000244140625 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.UVNode", + "m_ObjectId": "dbcb748279484a4590e53518c49122b8", + "m_Group": { + "m_Id": "013228b0fdf1424097798f0973a9a4fb" + }, + "m_Name": "UV", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4744.0, + "y": -2762.0, + "width": 145.0, + "height": 130.0 + } + }, + "m_Slots": [ + { + "m_Id": "7a0f504e4175406dbd8134250f4e350b" + } + ], + "synonyms": [], + "m_Precision": 1, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_OutputChannel": 1 +} + +{ + "m_SGVersion": 3, + "m_Type": "UnityEditor.ShaderGraph.Internal.ColorShaderProperty", + "m_ObjectId": "dc75c4e3a1bc4bb0a128086c2b0679a5", + "m_Guid": { + "m_GuidSerialized": "85cd941f-2fd2-43a3-b0fa-9f728bfb4220" + }, + "m_Name": "Face Color", + "m_DefaultReferenceName": "Color_99AFBB3D", + "m_OverrideReferenceName": "_FaceColor", + "m_GeneratePropertyBlock": true, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": { + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "m_ColorMode": 1 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector2MaterialSlot", + "m_ObjectId": "de0c6f7f7af94defa6c3dbc6433de9d4", + "m_Id": 6, + "m_DisplayName": "RG", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "RG", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "deac82280a2b43078e0e40863e2d974c", + "m_Id": 4, + "m_DisplayName": "A", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Texture2DMaterialSlot", + "m_ObjectId": "def8e0b9d8384982bc5b4c32d877e458", + "m_Id": 0, + "m_DisplayName": "Outline Texture", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_BareResource": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.SubtractNode", + "m_ObjectId": "dff7a66b353a4023b29c9d937da77960", + "m_Group": { + "m_Id": "484b51c50485473b819c4f05087b32d7" + }, + "m_Name": "Subtract", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4602.0, + "y": -4298.0, + "width": 130.0, + "height": 118.0 + } + }, + "m_Slots": [ + { + "m_Id": "7b8a19bd115e4167a25b59cb3218a817" + }, + { + "m_Id": "0b57f2d35157477ab2b29a5aac14ae8b" + }, + { + "m_Id": "e9e06fcb161e44ba8cc9f6f60264df78" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.UVMaterialSlot", + "m_ObjectId": "e141833aa78b4fd59ecad949beb43a78", + "m_Id": 2, + "m_DisplayName": "UV", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "UV", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0 + }, + "m_Labels": [ + "X", + "Y" + ], + "m_Channel": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "e2d28f29bbac4983a401574480b5ca28", + "m_Id": 1, + "m_DisplayName": "R", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "R", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.NormalMaterialSlot", + "m_ObjectId": "e386b183a18245a796b024022f7f3074", + "m_Id": 0, + "m_DisplayName": "Normal (Object Space)", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "NormalOS", + "m_StageCapability": 2, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [ + "X", + "Y", + "Z" + ], + "m_Space": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "e444f2c81d1e48329fa2c91005277e8d", + "m_Id": 1, + "m_DisplayName": "R", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "R", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector2MaterialSlot", + "m_ObjectId": "e495a9f7a11f4eb89334e83be154ceb9", + "m_Id": 2, + "m_DisplayName": "UV", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "UV", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0 + }, + "m_Labels": [ + "X", + "Y" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "e51a636b2621440eb94cc802c1cf4bfc", + "m_Id": 2, + "m_DisplayName": "Height", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Height", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "e6e80c6b0db545cda26b079a9a78fbb3", + "m_Id": 5, + "m_DisplayName": "G", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "G", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.CustomFunctionNode", + "m_ObjectId": "e818605f8f5a4f01bf61caaa33693581", + "m_Group": { + "m_Id": "42cadae0923e4969b50bbc3f78185934" + }, + "m_Name": "ComputeSDF44 (Custom Function)", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4113.0, + "y": -3368.999755859375, + "width": 243.99998474121095, + "height": 214.0 + } + }, + "m_Slots": [ + { + "m_Id": "641eda269d7b4da9acb65f8d50035ea9" + }, + { + "m_Id": "f6823778a3cf42d5bbe8a83e5f9c9fa3" + }, + { + "m_Id": "9c26fdddba244d36a854298c00473247" + }, + { + "m_Id": "f684c5678e9e4f078157a3ab7ef5057b" + }, + { + "m_Id": "14ad19bf20a140dd88d58452d7df688b" + }, + { + "m_Id": "215a82c127204988b751de7d3a39b955" + }, + { + "m_Id": "c478c32c45884c57a62f7b2aa8ddc3b0" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SourceType": 0, + "m_FunctionName": "ComputeSDF44", + "m_FunctionSource": "96de908384869cd409c75efa351d5edf", + "m_FunctionBody": "Enter function body here..." +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "e9e06fcb161e44ba8cc9f6f60264df78", + "m_Id": 2, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "ebbd94a7102a4457a48ac492de3bff14", + "m_Id": 5, + "m_DisplayName": "G", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "G", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "ebd6d75abcb84108bcadbfe7ee5f6244", + "m_Id": 7, + "m_DisplayName": "TextureHeight", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "TextureHeight", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "ec184d6d9fb2494897774c9e7d279e6d", + "m_Group": { + "m_Id": "013228b0fdf1424097798f0973a9a4fb" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4754.0, + "y": -2625.0, + "width": 145.0, + "height": 34.0 + } + }, + "m_Slots": [ + { + "m_Id": "ca2a1083dc014f39ab8af0cdf140866b" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "07946387933e416db576b677f0711e5f" + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.SubtractNode", + "m_ObjectId": "ec1f2e8bc9fd4ae38b133c60ee6c49b8", + "m_Group": { + "m_Id": "42cadae0923e4969b50bbc3f78185934" + }, + "m_Name": "Subtract", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4927.0, + "y": -3204.0, + "width": 130.0, + "height": 117.99999237060547 + } + }, + "m_Slots": [ + { + "m_Id": "748c31bbcecc4b30bec2e42c0612175b" + }, + { + "m_Id": "4bda5c294e1949138d033640e1d385b4" + }, + { + "m_Id": "4e64dac49ddc47c3b5b1e27b17a08304" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.Internal.Vector4ShaderProperty", + "m_ObjectId": "ec79eb447dfd47a9b3380344c6a60f43", + "m_Guid": { + "m_GuidSerialized": "54c77f8b-0534-4b35-a3f0-83ab2ebe6c1f" + }, + "m_Name": "_OutlineTex_ST", + "m_DefaultReferenceName": "Vector4_1774DE83", + "m_OverrideReferenceName": "_OutlineTex_ST", + "m_GeneratePropertyBlock": true, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": { + "x": 1.0, + "y": 1.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.GroupData", + "m_ObjectId": "ecf16c34d46f4502ac601f0c38c7576b", + "m_Title": "Vertex Color", + "m_Position": { + "x": -3614.000244140625, + "y": -3549.000244140625 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "ed1d1f1613334c3bb904dd08161cd7e5", + "m_Id": 0, + "m_DisplayName": "_GradientScale", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "ed6c215a65584deeaefad1d2c7743044", + "m_Id": 4, + "m_DisplayName": "RGBA", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "RGBA", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector3MaterialSlot", + "m_ObjectId": "edbee7a8952b46529ac5ad0365775774", + "m_Id": 5, + "m_DisplayName": "RGB", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "RGB", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.ColorRGBMaterialSlot", + "m_ObjectId": "ef0b93f78372439696f50711eaf57d90", + "m_Id": 0, + "m_DisplayName": "Base Color", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "BaseColor", + "m_StageCapability": 2, + "m_Value": { + "x": 0.7353569269180298, + "y": 0.7353569269180298, + "z": 0.7353569269180298 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [ + "X", + "Y", + "Z" + ], + "m_ColorMode": 0, + "m_DefaultColor": { + "r": 0.5, + "g": 0.5, + "b": 0.5, + "a": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector2MaterialSlot", + "m_ObjectId": "ef9738ec7e894772a14e9dce441c16c6", + "m_Id": 2, + "m_DisplayName": "UV", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "UV", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0 + }, + "m_Labels": [ + "X", + "Y" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.SamplerStateMaterialSlot", + "m_ObjectId": "f01d52cdcb1647aab35782b4af535efd", + "m_Id": 3, + "m_DisplayName": "Sampler", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Sampler", + "m_StageCapability": 3, + "m_BareResource": false +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.CustomFunctionNode", + "m_ObjectId": "f23a8b2b7c85478388ff7a8c8a6de740", + "m_Group": { + "m_Id": "42cadae0923e4969b50bbc3f78185934" + }, + "m_Name": "Layer4 (Custom Function)", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -3819.0, + "y": -3286.0, + "width": 193.0, + "height": 190.0 + } + }, + "m_Slots": [ + { + "m_Id": "0fac35636fca4474a6afaefc3c757775" + }, + { + "m_Id": "cc88101667c9488f9c5a716e851c1b21" + }, + { + "m_Id": "68ec7c31365549d6a8ce883edfc02de2" + }, + { + "m_Id": "02559cbe5ad441a3904ccb75ded2b2c5" + }, + { + "m_Id": "34a67e0fef884f9399e674d9eeaf720c" + }, + { + "m_Id": "3802c81c3be24823aa1d7c9997a33c29" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SourceType": 0, + "m_FunctionName": "Layer4", + "m_FunctionSource": "96de908384869cd409c75efa351d5edf", + "m_FunctionBody": "Enter function body here..." +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "f2903158b3624759bca1fcd843698078", + "m_Id": 1, + "m_DisplayName": "B", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 3, + "m_Value": { + "x": 2.0, + "y": 2.0, + "z": 2.0, + "w": 2.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicValueMaterialSlot", + "m_ObjectId": "f2a351a5375c441b8d9ab7e2c9545a77", + "m_Id": 1, + "m_DisplayName": "B", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 3, + "m_Value": { + "e00": 2.0, + "e01": 2.0, + "e02": 2.0, + "e03": 2.0, + "e10": 2.0, + "e11": 2.0, + "e12": 2.0, + "e13": 2.0, + "e20": 2.0, + "e21": 2.0, + "e22": 2.0, + "e23": 2.0, + "e30": 2.0, + "e31": 2.0, + "e32": 2.0, + "e33": 2.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Texture2DPropertiesNode", + "m_ObjectId": "f383b24f0bc6434dafe44b3e3d338a63", + "m_Group": { + "m_Id": "d0a791a544614667962a9a9a9ce0c68a" + }, + "m_Name": "Texel Size", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -6318.6669921875, + "y": -3153.3330078125, + "width": 185.33348083496095, + "height": 101.33348846435547 + } + }, + "m_Slots": [ + { + "m_Id": "fb5e1e2a67c14602808358686bb75091" + }, + { + "m_Id": "712da461f71a454db59d349f752d41ee" + }, + { + "m_Id": "b000f852aa984e9dae25b125a4607f4e" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "f3d31c1f18d8491a8ecf5cbc37e4b7db", + "m_Group": { + "m_Id": "42cadae0923e4969b50bbc3f78185934" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4291.33349609375, + "y": -3246.0, + "width": 154.0, + "height": 34.0 + } + }, + "m_Slots": [ + { + "m_Id": "ed1d1f1613334c3bb904dd08161cd7e5" + } + ], + "synonyms": [], + "m_Precision": 1, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "a6bbb32e8d884be9bb36db91fe4b81b1" + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "f42ad06b3c6a45d3ab33de904c063412", + "m_Id": 3, + "m_DisplayName": "A", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "f48f04ad45d046a8b88e71731ed506e7", + "m_Id": 4, + "m_DisplayName": "R", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "R", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BlockNode", + "m_ObjectId": "f4ecc442a2d246759f7c2c0412953d28", + "m_Group": { + "m_Id": "" + }, + "m_Name": "VertexDescription.Normal", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": 0.0, + "y": 0.0, + "width": 0.0, + "height": 0.0 + } + }, + "m_Slots": [ + { + "m_Id": "a3f8b6e8ae7f48e2989a029904401502" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SerializedDescriptor": "VertexDescription.Normal" +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "f6823778a3cf42d5bbe8a83e5f9c9fa3", + "m_Id": 1, + "m_DisplayName": "SD", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "SD", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "f684c5678e9e4f078157a3ab7ef5057b", + "m_Id": 4, + "m_DisplayName": "Isoperimeter", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Isoperimeter", + "m_StageCapability": 3, + "m_Value": { + "x": 3.0, + "y": 2.0, + "z": 1.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.SampleTexture2DNode", + "m_ObjectId": "f814deb543c24fbbafbcdb5071d96022", + "m_Group": { + "m_Id": "42cadae0923e4969b50bbc3f78185934" + }, + "m_Name": "Sample Texture 2D", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -4569.0, + "y": -3245.000244140625, + "width": 184.0, + "height": 253.0 + } + }, + "m_Slots": [ + { + "m_Id": "abd59150589b436cadf8c9e6f43ccb8e" + }, + { + "m_Id": "7acfafd73b8c4dfab8c55c18a887e087" + }, + { + "m_Id": "928621a3ca2d41c89a10336bbbc81ddc" + }, + { + "m_Id": "b7f9ac55517141868bfb9d2ad6429792" + }, + { + "m_Id": "09b1b86c1c074337a4c439d3a308dd2e" + }, + { + "m_Id": "1f247658c7ba45fb93c41f51e21acb0d" + }, + { + "m_Id": "d30452ac6b244ecca03df4d7b4de9f81" + }, + { + "m_Id": "215b30ae27784ec3a13360a9029af283" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_TextureType": 0, + "m_NormalMapSpace": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "f864c900600e427ba7793f00c715e971", + "m_Id": 0, + "m_DisplayName": "Outline Width", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicValueMaterialSlot", + "m_ObjectId": "fa6de3be9f5b4411b5081b49e645f424", + "m_Id": 1, + "m_DisplayName": "B", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 3, + "m_Value": { + "e00": 2.0, + "e01": 2.0, + "e02": 2.0, + "e03": 2.0, + "e10": 2.0, + "e11": 2.0, + "e12": 2.0, + "e13": 2.0, + "e20": 2.0, + "e21": 2.0, + "e22": 2.0, + "e23": 2.0, + "e30": 2.0, + "e31": 2.0, + "e32": 2.0, + "e33": 2.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DivideNode", + "m_ObjectId": "faace8101df943d8956faa31728cb004", + "m_Group": { + "m_Id": "daaf032a109749a88c9b8ff8e1f8b541" + }, + "m_Name": "Divide", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -5400.0, + "y": -3851.000244140625, + "width": 130.0, + "height": 118.0 + } + }, + "m_Slots": [ + { + "m_Id": "77e28f3e930b4c249145630ec961af95" + }, + { + "m_Id": "f2903158b3624759bca1fcd843698078" + }, + { + "m_Id": "30ca940fe2794c949f2a1d4d2caaa446" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "facc84930f544fd7a0205a6176b18ac0", + "m_Id": 2, + "m_DisplayName": "RGBA", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "RGBA", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Texture2DInputMaterialSlot", + "m_ObjectId": "fb15d0ba56d54a6192f11e107aeb5fa8", + "m_Id": 1, + "m_DisplayName": "Texture", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Texture", + "m_StageCapability": 3, + "m_BareResource": false, + "m_Texture": { + "m_SerializedTexture": "{\"texture\":{\"instanceID\":0}}", + "m_Guid": "" + }, + "m_DefaultType": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "fb5e1e2a67c14602808358686bb75091", + "m_Id": 0, + "m_DisplayName": "Width", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Width", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "X" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "fc2e62201c5847e798fd939314413fcd", + "m_Id": 4, + "m_DisplayName": "RGBA", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "RGBA", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicValueMaterialSlot", + "m_ObjectId": "fd0b096ed5b74f9e9ec51327be200731", + "m_Id": 2, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "e00": 0.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 0.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 0.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 0.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.SampleTexture2DNode", + "m_ObjectId": "fdb77c3e92ee497b88ca5dc46dc45350", + "m_Group": { + "m_Id": "98934a69591249d5b8b92b39045359a3" + }, + "m_Name": "Sample Texture 2D", + "m_DrawState": { + "m_Expanded": false, + "m_Position": { + "serializedVersion": "2", + "x": -4171.0, + "y": -2362.0, + "width": 180.0, + "height": 181.0 + } + }, + "m_Slots": [ + { + "m_Id": "4328cdbf78b94c038fd614c59bfe1cac" + }, + { + "m_Id": "04dfcc9ff13a4bf282ed46faec39d15c" + }, + { + "m_Id": "71dd947935b64ce38f0d25406dde447b" + }, + { + "m_Id": "61a6ac5f29344d109411f26850ab0a96" + }, + { + "m_Id": "44806230fa384c1e95f9c5918a14f056" + }, + { + "m_Id": "4eb3c00a1ca44e10be833b7ca61ff059" + }, + { + "m_Id": "57abc172afd449e2a4d567f93432507b" + }, + { + "m_Id": "cda5e3b4c1054bf3a65c0b7ec6bc778a" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_TextureType": 0, + "m_NormalMapSpace": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector3MaterialSlot", + "m_ObjectId": "fe11fa80cc1847a5a37f6757d521cf25", + "m_Id": 5, + "m_DisplayName": "RGB", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "RGB", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [] +} + diff --git a/Assets/Resources/TextMesh Pro/Shaders/TMP_SDF-URP Unlit.shadergraph.meta b/Assets/Resources/TextMesh Pro/Shaders/TMP_SDF-URP Unlit.shadergraph.meta new file mode 100644 index 0000000..248825c --- /dev/null +++ b/Assets/Resources/TextMesh Pro/Shaders/TMP_SDF-URP Unlit.shadergraph.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 124c112a6e8f1a54e8b0870e881b56d8 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: 625f186215c104763be7675aa2d941aa, type: 3} diff --git a/Assets/Resources/TextMesh Pro/Shaders/TMP_SDF.shader b/Assets/Resources/TextMesh Pro/Shaders/TMP_SDF.shader new file mode 100644 index 0000000..7fd0673 --- /dev/null +++ b/Assets/Resources/TextMesh Pro/Shaders/TMP_SDF.shader @@ -0,0 +1,321 @@ +Shader "TextMeshPro/Distance Field" { + +Properties { + _FaceTex ("Face Texture", 2D) = "white" {} + _FaceUVSpeedX ("Face UV Speed X", Range(-5, 5)) = 0.0 + _FaceUVSpeedY ("Face UV Speed Y", Range(-5, 5)) = 0.0 + _FaceColor ("Face Color", Color) = (1,1,1,1) + _FaceDilate ("Face Dilate", Range(-1,1)) = 0 + + _OutlineColor ("Outline Color", Color) = (0,0,0,1) + _OutlineTex ("Outline Texture", 2D) = "white" {} + _OutlineUVSpeedX ("Outline UV Speed X", Range(-5, 5)) = 0.0 + _OutlineUVSpeedY ("Outline UV Speed Y", Range(-5, 5)) = 0.0 + _OutlineWidth ("Outline Thickness", Range(0, 1)) = 0 + _OutlineSoftness ("Outline Softness", Range(0,1)) = 0 + + _Bevel ("Bevel", Range(0,1)) = 0.5 + _BevelOffset ("Bevel Offset", Range(-0.5,0.5)) = 0 + _BevelWidth ("Bevel Width", Range(-.5,0.5)) = 0 + _BevelClamp ("Bevel Clamp", Range(0,1)) = 0 + _BevelRoundness ("Bevel Roundness", Range(0,1)) = 0 + + _LightAngle ("Light Angle", Range(0.0, 6.2831853)) = 3.1416 + _SpecularColor ("Specular", Color) = (1,1,1,1) + _SpecularPower ("Specular", Range(0,4)) = 2.0 + _Reflectivity ("Reflectivity", Range(5.0,15.0)) = 10 + _Diffuse ("Diffuse", Range(0,1)) = 0.5 + _Ambient ("Ambient", Range(1,0)) = 0.5 + + _BumpMap ("Normal map", 2D) = "bump" {} + _BumpOutline ("Bump Outline", Range(0,1)) = 0 + _BumpFace ("Bump Face", Range(0,1)) = 0 + + _ReflectFaceColor ("Reflection Color", Color) = (0,0,0,1) + _ReflectOutlineColor("Reflection Color", Color) = (0,0,0,1) + _Cube ("Reflection Cubemap", Cube) = "black" { /* TexGen CubeReflect */ } + _EnvMatrixRotation ("Texture Rotation", vector) = (0, 0, 0, 0) + + + _UnderlayColor ("Border Color", Color) = (0,0,0, 0.5) + _UnderlayOffsetX ("Border OffsetX", Range(-1,1)) = 0 + _UnderlayOffsetY ("Border OffsetY", Range(-1,1)) = 0 + _UnderlayDilate ("Border Dilate", Range(-1,1)) = 0 + _UnderlaySoftness ("Border Softness", Range(0,1)) = 0 + + _GlowColor ("Color", Color) = (0, 1, 0, 0.5) + _GlowOffset ("Offset", Range(-1,1)) = 0 + _GlowInner ("Inner", Range(0,1)) = 0.05 + _GlowOuter ("Outer", Range(0,1)) = 0.05 + _GlowPower ("Falloff", Range(1, 0)) = 0.75 + + _WeightNormal ("Weight Normal", float) = 0 + _WeightBold ("Weight Bold", float) = 0.5 + + _ShaderFlags ("Flags", float) = 0 + _ScaleRatioA ("Scale RatioA", float) = 1 + _ScaleRatioB ("Scale RatioB", float) = 1 + _ScaleRatioC ("Scale RatioC", float) = 1 + + _MainTex ("Font Atlas", 2D) = "white" {} + _TextureWidth ("Texture Width", float) = 512 + _TextureHeight ("Texture Height", float) = 512 + _GradientScale ("Gradient Scale", float) = 5.0 + _ScaleX ("Scale X", float) = 1.0 + _ScaleY ("Scale Y", float) = 1.0 + _PerspectiveFilter ("Perspective Correction", Range(0, 1)) = 0.875 + _Sharpness ("Sharpness", Range(-1,1)) = 0 + + _VertexOffsetX ("Vertex OffsetX", float) = 0 + _VertexOffsetY ("Vertex OffsetY", float) = 0 + + _MaskCoord ("Mask Coordinates", vector) = (0, 0, 32767, 32767) + _ClipRect ("Clip Rect", vector) = (-32767, -32767, 32767, 32767) + _MaskSoftnessX ("Mask SoftnessX", float) = 0 + _MaskSoftnessY ("Mask SoftnessY", float) = 0 + + _StencilComp ("Stencil Comparison", Float) = 8 + _Stencil ("Stencil ID", Float) = 0 + _StencilOp ("Stencil Operation", Float) = 0 + _StencilWriteMask ("Stencil Write Mask", Float) = 255 + _StencilReadMask ("Stencil Read Mask", Float) = 255 + + _CullMode ("Cull Mode", Float) = 0 + _ColorMask ("Color Mask", Float) = 15 +} + +SubShader { + + Tags + { + "Queue"="Transparent" + "IgnoreProjector"="True" + "RenderType"="Transparent" + } + + Stencil + { + Ref [_Stencil] + Comp [_StencilComp] + Pass [_StencilOp] + ReadMask [_StencilReadMask] + WriteMask [_StencilWriteMask] + } + + Cull [_CullMode] + ZWrite Off + Lighting Off + Fog { Mode Off } + ZTest [unity_GUIZTestMode] + Blend One OneMinusSrcAlpha + ColorMask [_ColorMask] + + Pass { + CGPROGRAM + #pragma target 3.0 + #pragma vertex VertShader + #pragma fragment PixShader + #pragma shader_feature __ BEVEL_ON + #pragma shader_feature __ UNDERLAY_ON UNDERLAY_INNER + #pragma shader_feature __ GLOW_ON + + #pragma multi_compile __ UNITY_UI_CLIP_RECT + #pragma multi_compile __ UNITY_UI_ALPHACLIP + + #include "UnityCG.cginc" + #include "UnityUI.cginc" + #include "TMPro_Properties.cginc" + #include "TMPro.cginc" + + struct vertex_t + { + UNITY_VERTEX_INPUT_INSTANCE_ID + float4 position : POSITION; + float3 normal : NORMAL; + fixed4 color : COLOR; + float4 texcoord0 : TEXCOORD0; + float2 texcoord1 : TEXCOORD1; + }; + + struct pixel_t + { + UNITY_VERTEX_INPUT_INSTANCE_ID + UNITY_VERTEX_OUTPUT_STEREO + float4 position : SV_POSITION; + fixed4 color : COLOR; + float2 atlas : TEXCOORD0; // Atlas + float4 param : TEXCOORD1; // alphaClip, scale, bias, weight + float4 mask : TEXCOORD2; // Position in object space(xy), pixel Size(zw) + float3 viewDir : TEXCOORD3; + + #if (UNDERLAY_ON || UNDERLAY_INNER) + float4 texcoord2 : TEXCOORD4; // u,v, scale, bias + fixed4 underlayColor : COLOR1; + #endif + + float4 textures : TEXCOORD5; + }; + + // Used by Unity internally to handle Texture Tiling and Offset. + float4 _FaceTex_ST; + float4 _OutlineTex_ST; + float _UIMaskSoftnessX; + float _UIMaskSoftnessY; + + pixel_t VertShader(vertex_t input) + { + pixel_t output; + + UNITY_INITIALIZE_OUTPUT(pixel_t, output); + UNITY_SETUP_INSTANCE_ID(input); + UNITY_TRANSFER_INSTANCE_ID(input,output); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(output); + + float bold = step(input.texcoord0.w, 0); + + float4 vert = input.position; + vert.x += _VertexOffsetX; + vert.y += _VertexOffsetY; + + float4 vPosition = UnityObjectToClipPos(vert); + + float2 pixelSize = vPosition.w; + pixelSize /= float2(_ScaleX, _ScaleY) * abs(mul((float2x2)UNITY_MATRIX_P, _ScreenParams.xy)); + float scale = rsqrt(dot(pixelSize, pixelSize)); + scale *= abs(input.texcoord0.w) * _GradientScale * (_Sharpness + 1); + if (UNITY_MATRIX_P[3][3] == 0) scale = lerp(abs(scale) * (1 - _PerspectiveFilter), scale, abs(dot(UnityObjectToWorldNormal(input.normal.xyz), normalize(WorldSpaceViewDir(vert))))); + + float weight = lerp(_WeightNormal, _WeightBold, bold) / 4.0; + weight = (weight + _FaceDilate) * _ScaleRatioA * 0.5; + + float bias =(.5 - weight) + (.5 / scale); + + float alphaClip = (1.0 - _OutlineWidth * _ScaleRatioA - _OutlineSoftness * _ScaleRatioA); + + #if GLOW_ON + alphaClip = min(alphaClip, 1.0 - _GlowOffset * _ScaleRatioB - _GlowOuter * _ScaleRatioB); + #endif + + alphaClip = alphaClip / 2.0 - ( .5 / scale) - weight; + + #if (UNDERLAY_ON || UNDERLAY_INNER) + float4 underlayColor = _UnderlayColor; + underlayColor.rgb *= underlayColor.a; + + float bScale = scale; + bScale /= 1 + ((_UnderlaySoftness*_ScaleRatioC) * bScale); + float bBias = (0.5 - weight) * bScale - 0.5 - ((_UnderlayDilate * _ScaleRatioC) * 0.5 * bScale); + + float x = -(_UnderlayOffsetX * _ScaleRatioC) * _GradientScale / _TextureWidth; + float y = -(_UnderlayOffsetY * _ScaleRatioC) * _GradientScale / _TextureHeight; + float2 bOffset = float2(x, y); + #endif + + // Generate UV for the Masking Texture + float4 clampedRect = clamp(_ClipRect, -2e10, 2e10); + float2 maskUV = (vert.xy - clampedRect.xy) / (clampedRect.zw - clampedRect.xy); + + // Support for texture tiling and offset + float2 textureUV = input.texcoord1; + float2 faceUV = TRANSFORM_TEX(textureUV, _FaceTex); + float2 outlineUV = TRANSFORM_TEX(textureUV, _OutlineTex); + + + output.position = vPosition; + output.color = input.color; + output.atlas = input.texcoord0; + output.param = float4(alphaClip, scale, bias, weight); + const half2 maskSoftness = half2(max(_UIMaskSoftnessX, _MaskSoftnessX), max(_UIMaskSoftnessY, _MaskSoftnessY)); + output.mask = half4(vert.xy * 2 - clampedRect.xy - clampedRect.zw, 0.25 / (0.25 * maskSoftness + pixelSize.xy)); + output.viewDir = mul((float3x3)_EnvMatrix, _WorldSpaceCameraPos.xyz - mul(unity_ObjectToWorld, vert).xyz); + #if (UNDERLAY_ON || UNDERLAY_INNER) + output.texcoord2 = float4(input.texcoord0 + bOffset, bScale, bBias); + output.underlayColor = underlayColor; + #endif + output.textures = float4(faceUV, outlineUV); + + return output; + } + + + fixed4 PixShader(pixel_t input) : SV_Target + { + UNITY_SETUP_INSTANCE_ID(input); + + float c = tex2D(_MainTex, input.atlas).a; + + #ifndef UNDERLAY_ON + clip(c - input.param.x); + #endif + + float scale = input.param.y; + float bias = input.param.z; + float weight = input.param.w; + float sd = (bias - c) * scale; + + float outline = (_OutlineWidth * _ScaleRatioA) * scale; + float softness = (_OutlineSoftness * _ScaleRatioA) * scale; + + half4 faceColor = _FaceColor; + half4 outlineColor = _OutlineColor; + + faceColor.rgb *= input.color.rgb; + + faceColor *= tex2D(_FaceTex, input.textures.xy + float2(_FaceUVSpeedX, _FaceUVSpeedY) * _Time.y); + outlineColor *= tex2D(_OutlineTex, input.textures.zw + float2(_OutlineUVSpeedX, _OutlineUVSpeedY) * _Time.y); + + faceColor = GetColor(sd, faceColor, outlineColor, outline, softness); + + #if BEVEL_ON + float3 dxy = float3(0.5 / _TextureWidth, 0.5 / _TextureHeight, 0); + float3 n = GetSurfaceNormal(input.atlas, weight, dxy); + + float3 bump = UnpackNormal(tex2D(_BumpMap, input.textures.xy + float2(_FaceUVSpeedX, _FaceUVSpeedY) * _Time.y)).xyz; + bump *= lerp(_BumpFace, _BumpOutline, saturate(sd + outline * 0.5)); + n = normalize(n- bump); + + float3 light = normalize(float3(sin(_LightAngle), cos(_LightAngle), -1.0)); + + float3 col = GetSpecular(n, light); + faceColor.rgb += col*faceColor.a; + faceColor.rgb *= 1-(dot(n, light)*_Diffuse); + faceColor.rgb *= lerp(_Ambient, 1, n.z*n.z); + + fixed4 reflcol = texCUBE(_Cube, reflect(input.viewDir, -n)); + faceColor.rgb += reflcol.rgb * lerp(_ReflectFaceColor.rgb, _ReflectOutlineColor.rgb, saturate(sd + outline * 0.5)) * faceColor.a; + #endif + + #if UNDERLAY_ON + float d = tex2D(_MainTex, input.texcoord2.xy).a * input.texcoord2.z; + faceColor += input.underlayColor * saturate(d - input.texcoord2.w) * (1 - faceColor.a); + #endif + + #if UNDERLAY_INNER + float d = tex2D(_MainTex, input.texcoord2.xy).a * input.texcoord2.z; + faceColor += input.underlayColor * (1 - saturate(d - input.texcoord2.w)) * saturate(1 - sd) * (1 - faceColor.a); + #endif + + #if GLOW_ON + float4 glowColor = GetGlowColor(sd, scale); + faceColor.rgb += glowColor.rgb * glowColor.a; + #endif + + // Alternative implementation to UnityGet2DClipping with support for softness. + #if UNITY_UI_CLIP_RECT + half2 m = saturate((_ClipRect.zw - _ClipRect.xy - abs(input.mask.xy)) * input.mask.zw); + faceColor *= m.x * m.y; + #endif + + #if UNITY_UI_ALPHACLIP + clip(faceColor.a - 0.001); + #endif + + return faceColor * input.color.a; + } + ENDCG + } +} + +Fallback "TextMeshPro/Mobile/Distance Field" +CustomEditor "TMPro.EditorUtilities.TMP_SDFShaderGUI" +} diff --git a/Assets/Resources/TextMesh Pro/Shaders/TMP_SDF.shader.meta b/Assets/Resources/TextMesh Pro/Shaders/TMP_SDF.shader.meta new file mode 100644 index 0000000..e1cf3f3 --- /dev/null +++ b/Assets/Resources/TextMesh Pro/Shaders/TMP_SDF.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 68e6db2ebdc24f95958faec2be5558d6 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/TextMesh Pro/Shaders/TMP_Sprite.shader b/Assets/Resources/TextMesh Pro/Shaders/TMP_Sprite.shader new file mode 100644 index 0000000..e86a478 --- /dev/null +++ b/Assets/Resources/TextMesh Pro/Shaders/TMP_Sprite.shader @@ -0,0 +1,126 @@ +Shader "TextMeshPro/Sprite" +{ + Properties + { + _MainTex ("Sprite Texture", 2D) = "white" {} + _Color ("Tint", Color) = (1,1,1,1) + + _StencilComp ("Stencil Comparison", Float) = 8 + _Stencil ("Stencil ID", Float) = 0 + _StencilOp ("Stencil Operation", Float) = 0 + _StencilWriteMask ("Stencil Write Mask", Float) = 255 + _StencilReadMask ("Stencil Read Mask", Float) = 255 + + _CullMode ("Cull Mode", Float) = 0 + _ColorMask ("Color Mask", Float) = 15 + _ClipRect ("Clip Rect", vector) = (-32767, -32767, 32767, 32767) + + [Toggle(UNITY_UI_ALPHACLIP)] _UseUIAlphaClip ("Use Alpha Clip", Float) = 0 + } + + SubShader + { + Tags + { + "Queue"="Transparent" + "IgnoreProjector"="True" + "RenderType"="Transparent" + "PreviewType"="Plane" + "CanUseSpriteAtlas"="True" + } + + Stencil + { + Ref [_Stencil] + Comp [_StencilComp] + Pass [_StencilOp] + ReadMask [_StencilReadMask] + WriteMask [_StencilWriteMask] + } + + Cull [_CullMode] + Lighting Off + ZWrite Off + ZTest [unity_GUIZTestMode] + Blend SrcAlpha OneMinusSrcAlpha + ColorMask [_ColorMask] + + Pass + { + Name "Default" + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + #pragma target 2.0 + + #include "UnityCG.cginc" + #include "UnityUI.cginc" + + #pragma multi_compile __ UNITY_UI_CLIP_RECT + #pragma multi_compile __ UNITY_UI_ALPHACLIP + + struct appdata_t + { + float4 vertex : POSITION; + float4 color : COLOR; + float2 texcoord : TEXCOORD0; + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + + struct v2f + { + float4 vertex : SV_POSITION; + fixed4 color : COLOR; + float2 texcoord : TEXCOORD0; + float4 worldPosition : TEXCOORD1; + float4 mask : TEXCOORD2; + UNITY_VERTEX_OUTPUT_STEREO + }; + + sampler2D _MainTex; + fixed4 _Color; + fixed4 _TextureSampleAdd; + float4 _ClipRect; + float4 _MainTex_ST; + float _UIMaskSoftnessX; + float _UIMaskSoftnessY; + + v2f vert(appdata_t v) + { + v2f OUT; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(OUT); + float4 vPosition = UnityObjectToClipPos(v.vertex); + OUT.worldPosition = v.vertex; + OUT.vertex = vPosition; + + float2 pixelSize = vPosition.w; + pixelSize /= abs(mul((float2x2)UNITY_MATRIX_P, _ScreenParams.xy)); + + float4 clampedRect = clamp(_ClipRect, -2e10, 2e10); + OUT.texcoord = TRANSFORM_TEX(v.texcoord, _MainTex); + OUT.mask = half4(v.vertex.xy * 2 - clampedRect.xy - clampedRect.zw, 0.25 / (0.25 * half2(_UIMaskSoftnessX, _UIMaskSoftnessY) + abs(pixelSize.xy))); + + OUT.color = v.color * _Color; + return OUT; + } + + fixed4 frag(v2f IN) : SV_Target + { + half4 color = (tex2D(_MainTex, IN.texcoord) + _TextureSampleAdd) * IN.color; + + #if UNITY_UI_CLIP_RECT + half2 m = saturate((_ClipRect.zw - _ClipRect.xy - abs(IN.mask.xy)) * IN.mask.zw); + color *= m.x * m.y; + #endif + + #ifdef UNITY_UI_ALPHACLIP + clip (color.a - 0.001); + #endif + + return color; + } + ENDCG + } + } +} diff --git a/Assets/Resources/TextMesh Pro/Shaders/TMP_Sprite.shader.meta b/Assets/Resources/TextMesh Pro/Shaders/TMP_Sprite.shader.meta new file mode 100644 index 0000000..50ba195 --- /dev/null +++ b/Assets/Resources/TextMesh Pro/Shaders/TMP_Sprite.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: cf81c85f95fe47e1a27f6ae460cf182c +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/TextMesh Pro/Shaders/TMPro.cginc b/Assets/Resources/TextMesh Pro/Shaders/TMPro.cginc new file mode 100644 index 0000000..5898130 --- /dev/null +++ b/Assets/Resources/TextMesh Pro/Shaders/TMPro.cginc @@ -0,0 +1,84 @@ +float2 UnpackUV(float uv) +{ + float2 output; + output.x = floor(uv / 4096); + output.y = uv - 4096 * output.x; + + return output * 0.001953125; +} + +fixed4 GetColor(half d, fixed4 faceColor, fixed4 outlineColor, half outline, half softness) +{ + half faceAlpha = 1-saturate((d - outline * 0.5 + softness * 0.5) / (1.0 + softness)); + half outlineAlpha = saturate((d + outline * 0.5)) * sqrt(min(1.0, outline)); + + faceColor.rgb *= faceColor.a; + outlineColor.rgb *= outlineColor.a; + + faceColor = lerp(faceColor, outlineColor, outlineAlpha); + + faceColor *= faceAlpha; + + return faceColor; +} + +float3 GetSurfaceNormal(float4 h, float bias) +{ + bool raisedBevel = step(1, fmod(_ShaderFlags, 2)); + + h += bias+_BevelOffset; + + float bevelWidth = max(.01, _OutlineWidth+_BevelWidth); + + // Track outline + h -= .5; + h /= bevelWidth; + h = saturate(h+.5); + + if(raisedBevel) h = 1 - abs(h*2.0 - 1.0); + h = lerp(h, sin(h*3.141592/2.0), _BevelRoundness); + h = min(h, 1.0-_BevelClamp); + h *= _Bevel * bevelWidth * _GradientScale * -2.0; + + float3 va = normalize(float3(1.0, 0.0, h.y - h.x)); + float3 vb = normalize(float3(0.0, -1.0, h.w - h.z)); + + return cross(va, vb); +} + +float3 GetSurfaceNormal(float2 uv, float bias, float3 delta) +{ + // Read "height field" + float4 h = {tex2D(_MainTex, uv - delta.xz).a, + tex2D(_MainTex, uv + delta.xz).a, + tex2D(_MainTex, uv - delta.zy).a, + tex2D(_MainTex, uv + delta.zy).a}; + + return GetSurfaceNormal(h, bias); +} + +float3 GetSpecular(float3 n, float3 l) +{ + float spec = pow(max(0.0, dot(n, l)), _Reflectivity); + return _SpecularColor.rgb * spec * _SpecularPower; +} + +float4 GetGlowColor(float d, float scale) +{ + float glow = d - (_GlowOffset*_ScaleRatioB) * 0.5 * scale; + float t = lerp(_GlowInner, (_GlowOuter * _ScaleRatioB), step(0.0, glow)) * 0.5 * scale; + glow = saturate(abs(glow/(1.0 + t))); + glow = 1.0-pow(glow, _GlowPower); + glow *= sqrt(min(1.0, t)); // Fade off glow thinner than 1 screen pixel + return float4(_GlowColor.rgb, saturate(_GlowColor.a * glow * 2)); +} + +float4 BlendARGB(float4 overlying, float4 underlying) +{ + overlying.rgb *= overlying.a; + underlying.rgb *= underlying.a; + float3 blended = overlying.rgb + ((1-overlying.a)*underlying.rgb); + float alpha = underlying.a + (1-underlying.a)*overlying.a; + return float4(blended, alpha); +} + diff --git a/Assets/Resources/TextMesh Pro/Shaders/TMPro.cginc.meta b/Assets/Resources/TextMesh Pro/Shaders/TMPro.cginc.meta new file mode 100644 index 0000000..f21163e --- /dev/null +++ b/Assets/Resources/TextMesh Pro/Shaders/TMPro.cginc.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 407bc68d299748449bbf7f48ee690f8d +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: Version 2.0 + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/TextMesh Pro/Shaders/TMPro_Mobile.cginc b/Assets/Resources/TextMesh Pro/Shaders/TMPro_Mobile.cginc new file mode 100644 index 0000000..d145a77 --- /dev/null +++ b/Assets/Resources/TextMesh Pro/Shaders/TMPro_Mobile.cginc @@ -0,0 +1,165 @@ +struct vertex_t +{ + UNITY_VERTEX_INPUT_INSTANCE_ID + float4 position : POSITION; + float3 normal : NORMAL; + float4 color : COLOR; + float4 texcoord0 : TEXCOORD0; + float2 texcoord1 : TEXCOORD1; +}; + +struct pixel_t +{ + UNITY_VERTEX_INPUT_INSTANCE_ID + UNITY_VERTEX_OUTPUT_STEREO + float4 position : SV_POSITION; + float4 faceColor : COLOR; + float4 outlineColor : COLOR1; + float4 texcoord0 : TEXCOORD0; + float4 param : TEXCOORD1; // x = weight, y = no longer used + float2 mask : TEXCOORD2; + #if (UNDERLAY_ON || UNDERLAY_INNER) + float4 texcoord2 : TEXCOORD3; + float4 underlayColor : COLOR2; + #endif +}; + +float4 SRGBToLinear(float4 rgba) +{ + return float4(lerp(rgba.rgb / 12.92f, pow((rgba.rgb + 0.055f) / 1.055f, 2.4f), step(0.04045f, rgba.rgb)), rgba.a); +} + +float _UIMaskSoftnessX; +float _UIMaskSoftnessY; + +pixel_t VertShader(vertex_t input) +{ + pixel_t output; + + UNITY_INITIALIZE_OUTPUT(pixel_t, output); + UNITY_SETUP_INSTANCE_ID(input); + UNITY_TRANSFER_INSTANCE_ID(input, output); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(output); + + float bold = step(input.texcoord0.w, 0); + + float4 vert = input.position; + vert.x += _VertexOffsetX; + vert.y += _VertexOffsetY; + + float4 vPosition = UnityObjectToClipPos(vert); + + float weight = lerp(_WeightNormal, _WeightBold, bold) / 4.0; + weight = (weight + _FaceDilate) * _ScaleRatioA * 0.5; + + // Generate UV for the Masking Texture + float4 clampedRect = clamp(_ClipRect, -2e10, 2e10); + float2 maskUV = (vert.xy - clampedRect.xy) / (clampedRect.zw - clampedRect.xy); + + float4 color = input.color; + #if (FORCE_LINEAR && !UNITY_COLORSPACE_GAMMA) + color = SRGBToLinear(input.color); + #endif + + float opacity = color.a; + #if (UNDERLAY_ON | UNDERLAY_INNER) + opacity = 1.0; + #endif + + float4 faceColor = float4(color.rgb, opacity) * _FaceColor; + faceColor.rgb *= faceColor.a; + + float4 outlineColor = _OutlineColor; + outlineColor.a *= opacity; + outlineColor.rgb *= outlineColor.a; + + output.position = vPosition; + output.faceColor = faceColor; + output.outlineColor = outlineColor; + output.texcoord0 = float4(input.texcoord0.xy, maskUV.xy); + output.param = float4(0.5 - weight, 0, _OutlineWidth * _ScaleRatioA * 0.5, 0); + + float2 mask = float2(0, 0); + #if UNITY_UI_CLIP_RECT + mask = vert.xy * 2 - clampedRect.xy - clampedRect.zw; + #endif + output.mask = mask; + + #if (UNDERLAY_ON || UNDERLAY_INNER) + float4 underlayColor = _UnderlayColor; + underlayColor.rgb *= underlayColor.a; + + float x = -(_UnderlayOffsetX * _ScaleRatioC) * _GradientScale / _TextureWidth; + float y = -(_UnderlayOffsetY * _ScaleRatioC) * _GradientScale / _TextureHeight; + + output.texcoord2 = float4(input.texcoord0 + float2(x, y), input.color.a, 0); + output.underlayColor = underlayColor; + #endif + + return output; +} + +float4 PixShader(pixel_t input) : SV_Target +{ + UNITY_SETUP_INSTANCE_ID(input); + + float d = tex2D(_MainTex, input.texcoord0.xy).a; + + float pixelSize = abs(ddx(input.texcoord0.y)) + abs(ddy(input.texcoord0.y)); + pixelSize *= _TextureHeight * 0.75; + float scale = 1 / pixelSize * _GradientScale * (_Sharpness + 1); + + #if (UNDERLAY_ON | UNDERLAY_INNER) + float layerScale = scale; + layerScale /= 1 + ((_UnderlaySoftness * _ScaleRatioC) * layerScale); + float layerBias = input.param.x * layerScale - .5 - ((_UnderlayDilate * _ScaleRatioC) * .5 * layerScale); + #endif + + scale /= 1 + (_OutlineSoftness * _ScaleRatioA * scale); + + float4 faceColor = input.faceColor * saturate((d - input.param.x) * scale + 0.5); + + #if OUTLINE_ON + float4 outlineColor = lerp(input.faceColor, input.outlineColor, sqrt(min(1.0, input.param.z * scale * 2))); + faceColor = lerp(outlineColor, input.faceColor, saturate((d - input.param.x - input.param.z) * scale + 0.5)); + faceColor *= saturate((d - input.param.x + input.param.z) * scale + 0.5); + #endif + + #if UNDERLAY_ON + d = tex2D(_MainTex, input.texcoord2.xy).a * layerScale; + faceColor += float4(_UnderlayColor.rgb * _UnderlayColor.a, _UnderlayColor.a) * saturate(d - layerBias) * (1 - faceColor.a); + #endif + + #if UNDERLAY_INNER + float bias = input.param.x * scale - 0.5; + float sd = saturate(d * scale - bias - input.param.z); + d = tex2D(_MainTex, input.texcoord2.xy).a * layerScale; + faceColor += float4(_UnderlayColor.rgb * _UnderlayColor.a, _UnderlayColor.a) * (1 - saturate(d - layerBias)) * sd * (1 - faceColor.a); + #endif + + #if MASKING + float a = abs(_MaskInverse - tex2D(_MaskTex, input.texcoord0.zw).a); + float t = a + (1 - _MaskWipeControl) * _MaskEdgeSoftness - _MaskWipeControl; + a = saturate(t / _MaskEdgeSoftness); + faceColor.rgb = lerp(_MaskEdgeColor.rgb * faceColor.a, faceColor.rgb, a); + faceColor *= a; + #endif + + // Alternative implementation to UnityGet2DClipping with support for softness + #if UNITY_UI_CLIP_RECT + half2 maskSoftness = half2(max(_UIMaskSoftnessX, _MaskSoftnessX), max(_UIMaskSoftnessY, _MaskSoftnessY)); + float2 maskZW = 0.25 / (0.25 * maskSoftness + 1 / scale); + float2 m = saturate((_ClipRect.zw - _ClipRect.xy - abs(input.mask.xy)) * maskZW); + faceColor *= m.x * m.y; + #endif + + #if (UNDERLAY_ON | UNDERLAY_INNER) + faceColor *= input.texcoord2.z; + #endif + + #if UNITY_UI_ALPHACLIP + clip(faceColor.a - 0.001); + #endif + + return faceColor; +} diff --git a/Assets/Resources/TextMesh Pro/Shaders/TMPro_Mobile.cginc.meta b/Assets/Resources/TextMesh Pro/Shaders/TMPro_Mobile.cginc.meta new file mode 100644 index 0000000..4415e50 --- /dev/null +++ b/Assets/Resources/TextMesh Pro/Shaders/TMPro_Mobile.cginc.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: c334973cef89a9840b0b0c507e0377ab +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/TextMesh Pro/Shaders/TMPro_Properties.cginc b/Assets/Resources/TextMesh Pro/Shaders/TMPro_Properties.cginc new file mode 100644 index 0000000..b806b4f --- /dev/null +++ b/Assets/Resources/TextMesh Pro/Shaders/TMPro_Properties.cginc @@ -0,0 +1,80 @@ +// 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 _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/Assets/Resources/TextMesh Pro/Shaders/TMPro_Properties.cginc.meta b/Assets/Resources/TextMesh Pro/Shaders/TMPro_Properties.cginc.meta new file mode 100644 index 0000000..7b37f2f --- /dev/null +++ b/Assets/Resources/TextMesh Pro/Shaders/TMPro_Properties.cginc.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 3997e2241185407d80309a82f9148466 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/TextMesh Pro/Shaders/TMPro_Surface.cginc b/Assets/Resources/TextMesh Pro/Shaders/TMPro_Surface.cginc new file mode 100644 index 0000000..2153a9a --- /dev/null +++ b/Assets/Resources/TextMesh Pro/Shaders/TMPro_Surface.cginc @@ -0,0 +1,99 @@ +void VertShader(inout appdata_full v, out Input data) +{ + v.vertex.x += _VertexOffsetX; + v.vertex.y += _VertexOffsetY; + + UNITY_INITIALIZE_OUTPUT(Input, data); + + float bold = step(v.texcoord.w, 0); + + // Generate normal for backface + float3 view = ObjSpaceViewDir(v.vertex); + v.normal *= sign(dot(v.normal, view)); + +#if USE_DERIVATIVE + data.param.y = 1; +#else + float4 vert = v.vertex; + float4 vPosition = UnityObjectToClipPos(vert); + float2 pixelSize = vPosition.w; + + pixelSize /= float2(_ScaleX, _ScaleY) * mul((float2x2)UNITY_MATRIX_P, _ScreenParams.xy); + float scale = rsqrt(dot(pixelSize, pixelSize)); + scale *= abs(v.texcoord.w) * _GradientScale * (_Sharpness + 1); + scale = lerp(scale * (1 - _PerspectiveFilter), scale, abs(dot(UnityObjectToWorldNormal(v.normal.xyz), normalize(WorldSpaceViewDir(vert))))); + data.param.y = scale; +#endif + + data.param.x = (lerp(_WeightNormal, _WeightBold, bold) / 4.0 + _FaceDilate) * _ScaleRatioA * 0.5; // + data.viewDirEnv = mul((float3x3)_EnvMatrix, WorldSpaceViewDir(v.vertex)); +} + +void PixShader(Input input, inout SurfaceOutput o) +{ + +#if USE_DERIVATIVE + float2 pixelSize = float2(ddx(input.uv_MainTex.y), ddy(input.uv_MainTex.y)); + pixelSize *= _TextureWidth * .75; + float scale = rsqrt(dot(pixelSize, pixelSize)) * _GradientScale * (_Sharpness + 1); +#else + float scale = input.param.y; +#endif + + // Signed distance + float c = tex2D(_MainTex, input.uv_MainTex).a; + float sd = (.5 - c - input.param.x) * scale + .5; + float outline = _OutlineWidth*_ScaleRatioA * scale; + float softness = _OutlineSoftness*_ScaleRatioA * scale; + + // Color & Alpha + float4 faceColor = _FaceColor; + float4 outlineColor = _OutlineColor; + faceColor *= input.color; + outlineColor.a *= input.color.a; + faceColor *= tex2D(_FaceTex, float2(input.uv2_FaceTex.x + _FaceUVSpeedX * _Time.y, input.uv2_FaceTex.y + _FaceUVSpeedY * _Time.y)); + outlineColor *= tex2D(_OutlineTex, float2(input.uv2_OutlineTex.x + _OutlineUVSpeedX * _Time.y, input.uv2_OutlineTex.y + _OutlineUVSpeedY * _Time.y)); + faceColor = GetColor(sd, faceColor, outlineColor, outline, softness); + faceColor.rgb /= max(faceColor.a, 0.0001); + +#if BEVEL_ON + float3 delta = float3(1.0 / _TextureWidth, 1.0 / _TextureHeight, 0.0); + + float4 smp4x = {tex2D(_MainTex, input.uv_MainTex - delta.xz).a, + tex2D(_MainTex, input.uv_MainTex + delta.xz).a, + tex2D(_MainTex, input.uv_MainTex - delta.zy).a, + tex2D(_MainTex, input.uv_MainTex + delta.zy).a }; + + // Face Normal + float3 n = GetSurfaceNormal(smp4x, input.param.x); + + // Bumpmap + float3 bump = UnpackNormal(tex2D(_BumpMap, input.uv2_FaceTex.xy)).xyz; + bump *= lerp(_BumpFace, _BumpOutline, saturate(sd + outline * 0.5)); + bump = lerp(float3(0, 0, 1), bump, faceColor.a); + n = normalize(n - bump); + + // Cubemap reflection + fixed4 reflcol = texCUBE(_Cube, reflect(input.viewDirEnv, mul((float3x3)unity_ObjectToWorld, n))); + float3 emission = reflcol.rgb * lerp(_ReflectFaceColor.rgb, _ReflectOutlineColor.rgb, saturate(sd + outline * 0.5)) * faceColor.a; +#else + float3 n = float3(0, 0, -1); + float3 emission = float3(0, 0, 0); +#endif + +#if GLOW_ON + float4 glowColor = GetGlowColor(sd, scale); + glowColor.a *= input.color.a; + emission += glowColor.rgb*glowColor.a; + faceColor = BlendARGB(glowColor, faceColor); + faceColor.rgb /= max(faceColor.a, 0.0001); +#endif + + // Set Standard output structure + o.Albedo = faceColor.rgb; + o.Normal = -n; + o.Emission = emission; + o.Specular = lerp(_FaceShininess, _OutlineShininess, saturate(sd + outline * 0.5)); + o.Gloss = 1; + o.Alpha = faceColor.a; +} diff --git a/Assets/Resources/TextMesh Pro/Shaders/TMPro_Surface.cginc.meta b/Assets/Resources/TextMesh Pro/Shaders/TMPro_Surface.cginc.meta new file mode 100644 index 0000000..41ef4b1 --- /dev/null +++ b/Assets/Resources/TextMesh Pro/Shaders/TMPro_Surface.cginc.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: d930090c0cd643c7b55f19a38538c162 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/cldr.meta b/Assets/Resources/cldr.meta new file mode 100644 index 0000000..ae42de1 --- /dev/null +++ b/Assets/Resources/cldr.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e31eaddb979b1384eaa248909aa0f05e +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/cldr/common.meta b/Assets/Resources/cldr/common.meta new file mode 100644 index 0000000..783e71b --- /dev/null +++ b/Assets/Resources/cldr/common.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a06c91500a9ca724a93d4aad3625076e +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/cldr/common/supplemental.meta b/Assets/Resources/cldr/common/supplemental.meta new file mode 100644 index 0000000..32b9f50 --- /dev/null +++ b/Assets/Resources/cldr/common/supplemental.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6d9945fc6ef34534ab8f000757423c5a +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/cldr/common/supplemental/languageInfo.xml b/Assets/Resources/cldr/common/supplemental/languageInfo.xml new file mode 100644 index 0000000..3c550dc --- /dev/null +++ b/Assets/Resources/cldr/common/supplemental/languageInfo.xml @@ -0,0 +1,451 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Assets/Resources/cldr/common/supplemental/languageInfo.xml.meta b/Assets/Resources/cldr/common/supplemental/languageInfo.xml.meta new file mode 100644 index 0000000..b60c5df --- /dev/null +++ b/Assets/Resources/cldr/common/supplemental/languageInfo.xml.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 28e89533a55dcd2479f1925504591c0f +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/cldr/common/supplemental/likelySubtags.xml b/Assets/Resources/cldr/common/supplemental/likelySubtags.xml new file mode 100644 index 0000000..1a13b21 --- /dev/null +++ b/Assets/Resources/cldr/common/supplemental/likelySubtags.xml @@ -0,0 +1,9494 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Assets/Resources/cldr/common/supplemental/likelySubtags.xml.meta b/Assets/Resources/cldr/common/supplemental/likelySubtags.xml.meta new file mode 100644 index 0000000..c361f39 --- /dev/null +++ b/Assets/Resources/cldr/common/supplemental/likelySubtags.xml.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: ca15a9e813e6772498e98f548d5cae88 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/cldr/common/supplemental/supplementalMetadata.xml b/Assets/Resources/cldr/common/supplemental/supplementalMetadata.xml new file mode 100644 index 0000000..d80cdfa --- /dev/null +++ b/Assets/Resources/cldr/common/supplemental/supplementalMetadata.xml @@ -0,0 +1,1848 @@ + + + + + + + + + attributeValues attributes base comment context exception extend i ic languageMatch last_non_ignorable last_secondary_ignorable last_tertiary_ignorable optimize p pc pluralRule rbnfrule reset rules ruleset s sc settings substitute suppress_contractions suppression t tRule tc variable x + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Assets/Resources/cldr/common/supplemental/supplementalMetadata.xml.meta b/Assets/Resources/cldr/common/supplemental/supplementalMetadata.xml.meta new file mode 100644 index 0000000..6bb0c65 --- /dev/null +++ b/Assets/Resources/cldr/common/supplemental/supplementalMetadata.xml.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 9b574366c532ee74e8f3948783f9824b +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/cldr/common/validity.meta b/Assets/Resources/cldr/common/validity.meta new file mode 100644 index 0000000..784b2b7 --- /dev/null +++ b/Assets/Resources/cldr/common/validity.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: fad920a5b0edf4040afbba7d36f14c66 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/cldr/common/validity/currency.xml b/Assets/Resources/cldr/common/validity/currency.xml new file mode 100644 index 0000000..b8bda01 --- /dev/null +++ b/Assets/Resources/cldr/common/validity/currency.xml @@ -0,0 +1,73 @@ + + + + + + + + AED AFN ALL AMD ANG AOA ARS AUD AWG AZN + BAM BBD BDT BGN BHD BIF BMD BND BOB BRL BSD BTN BWP BYN BZD + CAD CDF CHF CLP CNY COP CRC CUC CUP CVE CZK + DJF DKK DOP DZD + EGP ERN ETB EUR + FJD FKP + GBP GEL GHS GIP GMD GNF GTQ GYD + HKD HNL HTG HUF + IDR ILS INR IQD IRR ISK + JMD JOD JPY + KES KGS KHR KMF KPW KRW KWD KYD KZT + LAK LBP LKR LRD LSL LYD + MAD MDL MGA MKD MMK MNT MOP MRU MUR MVR MWK MXN MYR MZN + NAD NGN NIO NOK NPR NZD + OMR + PAB PEN PGK PHP PKR PLN PYG + QAR + RON RSD RUB RWF + SAR SBD SCR SDG SEK SGD SHP SLE SOS SRD SSP STN SYP SZL + THB TJS TMT TND TOP TRY TTD TWD TZS + UAH UGX USD UYU UZS + VES VND VUV + WST + XAF XCD XOF XPF + YER + ZAR ZMW + + + + ADP AFA ALK AOK AON AOR ARA ARL~M ARP ATS AZM + BAD BAN BEC BEF BEL BGL~M BGO BOL BOP BOV BRB~C BRE BRN BRR BRZ BUK BYB BYR + CHE CHW CLE~F CNH CNX COU CSD CSK CYP + DDM DEM + ECS ECV EEK ESA~B ESP + FIM FRF + GEK GHC GNS GQE GRD GWE GWP + HRD HRK + IEP ILP ILR ISJ ITL + KRH KRO + LTL LTT LUC LUF LUL LVL LVR + MAF MCF MDC MGF MKN MLF MRO MTL MTP MVP MXP MXV MZE MZM + NIC NLG + PEI PES PLZ PTE + RHD ROL RUR + SDD SDP SIT SKK SLL SRG STD SUR SVC + TJR TMM TPE TRL + UAK UGS USN USS UYI UYP UYW + VEB VED VEF VNN + XAG XAU XBA~D XDR XEU XFO XFU XPD XPT XRE XSU XTS XUA + YDD YUD YUM~N YUR + ZAL ZMK ZRN ZRZ ZWD ZWL ZWR + + + XXX + + + diff --git a/Assets/Resources/cldr/common/validity/currency.xml.meta b/Assets/Resources/cldr/common/validity/currency.xml.meta new file mode 100644 index 0000000..bac66d1 --- /dev/null +++ b/Assets/Resources/cldr/common/validity/currency.xml.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: a294e0a8e25da0f41b99488499e64ce5 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/cldr/common/validity/language.xml b/Assets/Resources/cldr/common/validity/language.xml new file mode 100644 index 0000000..b84b050 --- /dev/null +++ b/Assets/Resources/cldr/common/validity/language.xml @@ -0,0 +1,664 @@ + + + + + + + + aa aaa~i aak~l aan~q aas~x aaz + ab aba~j abl~z + aca~b acd~f ach~i ack~n acp~z + ada~b add~j adl adn~o adq~u adw~z + ae aea~e aek~n aeq~s aeu aew aey~z + af afa~b afd~e afg~i afk afn~p afs~u afz + aga~o agq~z + aha~b ahg~i ahk~p ahr~t + aia~r ait aiw~y + aja ajg aji ajn ajp ajs ajw ajz + ak akb~m ako~z + ala alc~r alt~z + am ama~c ame~g ami~z + an ana~z + aoa~g aoi~n aor~u aox aoz + apa~z + aqa aqc~d aqg aqk~n aqp aqr aqt aqz + ar arc~e arh~l arn~z + as asa~c ase~l asn~z + ata~e atg~z + aua~d auf~u auw~z + av avb avd avi avk~o avs~v + awa~e awg~i awk awm~o awr~y + axb axe axg axk~m axx + ay aya~e ayg~i ayk~l ayn~q ays~u ayz + az aza~d azg azm~o azt azz + ba baa~j bal ban~p bar~y + bba~y + bca~b bcd~k bcm~w bcy~z + bda~z + be bea~k bem beo~z + bfa~u bfw~z + bg bga~g bgi~l bgn~z + bha~j bhl~z + bi bia~b bid~g bik~r bit~z + bja~c bje~p bjr~z + bka bkc~d bkf~z + bla~f blh~t blv~z + bm bma~x bmz + bn bna~g bni~z + bo boa~b boe~r bot~z + bpa bpc~e bpg~z + bqa~d bqf~z + br bra~d brf~z + bs bsa~c bse~y + bta btc~k btm~z + bua~k bum~q bus~z + bva~r bvt~z + bwa~u bww~z + bxa~j bxl~q bxs bxu~w bxz + bya~t byv~x byz + bza~z + ca caa~s cau~z + cba~d cbg cbi~l cbn~o cbq~w cby + ccc~e ccg~h ccj ccl~p ccr~s + cda cdc~f cdh~j cdm~o cdr~s cdy~z + ce cea~b ceg cek~l cen cet cey + cfa cfd cfg cfm + cga cgc cgg cgk + ch chb~d chf~h chj~r cht chw~z + cia~e cih cik cim~n cip cir ciw ciy + cja cje cjh~i cjk cjm~p cjs cjv cjy + ckb ckh ckl~o ckq~v ckx~z + cla clc cle clh~m clo clt~u clw cly + cma cmc cme cmg cmi cml~m cmo cmr~t + cna~c cng~i cnk~l cno~q cns~u cnw~x + co coa~h coj~q cot~x coz + cpa~c cpe~g cpi cpn~p cps cpu cpx~y + cqd + cr cra~d crf~t crv~z + cs csa~z + cta ctc~e ctg~h ctl~p cts~u cty~z + cu cua~c cuh~l cuo~y + cv cvg cvn + cwa~b cwe cwg cwt + cy cya~b cyo + czh czk czn~o czt + da daa dac~e dag~m dao daq~s dau~z + dba~b dbd~g dbi~j dbl~r dbt~w dby + dcc dcr + dda ddd~e ddg ddi~j ddn~o ddr~s ddw + de dec~i dek~n dep~s dev dez + dga~e dgg~i dgk~l dgn dgr~t dgw~x dgz + dhg dhi dhl~o dhr~s dhu~x + dia~d dif~j dil~p dir~s diu diw~z + dja~f dji~k djm~o djr dju djw + dka dkg dkk dkr~s dkx + dlg dlk dlm~n + dma~g dmk~o dmr~s dmu~y + dna dnd~e dng dni~k dnn~o dnr dnt~w dny + doa~c doe~f doh~i dok~l don~t dov~z + dpp + dra~e drg dri drl drn~o drq drs~u dry + dsb dse dsh~i dsl dsn~o dsq dsz + dta~b dtd dth~i dtk dtm~p dtr~u dty + dua~c due~i duk~s duu~z + dv dva + dwa dwk dwr~s dwu dww dwy~z + dya~b dyd dyg dyi dym~o dyu dyy + dz dza dze dzg dzl dzn + eaa + ebc ebg ebk ebo ebr ebu + ecr~s ecy + ee eee + efa efe efi + ega egl~m ego egx~y + ehs ehu + eip eit eiv + eja + eka eke ekg eki ekl~m eko~p ekr eky + el ele elh~i elk elm elo elu elx + ema~b eme emg emi emm~n emp~q ems emu emw~z + en ena~d enf enh enl~o enq~r enu~x + eo eot + epi + era erg~i erk ero err~t erw + es ese esg~i esl~o esq ess esu esx~y + et etb~c eth etn~o etr~u etx etz + eu euq + eve evh evn + ewo + ext + eya eyo + eza eze + fa faa~b fad faf~n fap far fau fax~z + fbl + fcs + fer + ff ffi ffm + fgr + fi fia fie~f fil fip fir fit~u fiw + fj + fkk fkv + fla flh~i fll fln flr fly + fmp fmu + fnb fng fni + fo fod foi fom~n for~s fox + fpe + fqs + fr frc~d frk frm fro~t + fse fsl fss + fub fud~f fuh~j fum~n fuq~r fut~v fuy + fvr + fwa fwe + fy + ga gaa~u gaw~y + gba~b gbd~n gbp~s gbu~z + gcc~f gcl gcn gcr gct + gd gda~o gdq~u gdx + gea~d gef~m geq ges gev~z + gfk gft + gga~b ggd~e ggg ggk~l ggt~u ggw + gha ghc ghe ghh ghk~l ghn~o ghr~t + gia~e gig~i gil~n gip~u giw~z + gjk gjm~n gjr gju + gka gkd~e gkn~p gku + gl glb~d glh glj~l glo glr glu glw gly + gma~b gmd~e gmg~h gml~n gmq~r gmu~z + gn gna~e gng~n gnq~r gnt~u gnw gnz + goa~z + gpa gpe gpn + gqa gqi gqn gqr gqu + gra~d grg~k grm gro grq~z + gse gsg gsl~p gss gsw + gta gtu + gu gua~f guh~i guk~u guw~x guz + gv gva gvc gve~f gvj gvl~p gvr~s gvy + gwa~g gwi~j gwm~n gwr gwt~u gww~x + gxx + gyb gyd~g gyi gyl~o gyr gyy~z + gza gzi gzn + ha haa~s hav~z + hba~b hbn~o hbu + hca hch + hds hdy + he hed heg~i hem + hgm hgw + hhi hhr hhy + hi hia~b hid hif~l hio hir hit hiw~x + hji + hka hke hkh hkk hkn hks + hla~b hld~e hlt~u + hma~n hmp~z + hna hnd~e hng~j hnn~o hns hnu + ho hoa~e hoh~m hoo~p hor~t hov~w hoy~z + hpo hps + hr hra hrc hre hrk hrm hro~p hrt~u hrw~x hrz + hsb hsh hsl hsn hss + ht hti hto hts htu htx + hu hub~m huo~z + hvc hve hvk hvn hvv + hwa hwc hwo + hy hya hyw~x + hz + ia iai ian iar + iba~b ibd~e ibg~h ibl~n ibr ibu iby + ica ich icl icr + id ida~e idi idr~u + ie + ifa~b ife~f ifk ifm ifu ify + ig igb ige igg igl~o igs igw + ihb ihi ihp ihw + ii iin iir + ijc ije ijj ijn~o ijs + ik iki ikk~l iko~p ikr~t ikv~x ikz + ila~b ilg ili ilk ilm ilo~p ils ilu~v + ima imi iml imn~o imr~t imy + inb~c ine ing~h inj inl~p ins~t inz + io ior iou iow + ipi ipo + iqu iqw + ira ire irh~i irk irn~o irr iru irx~y + is isa isc~e isg~i isk ism~o isr ist~u + it itb~e iti itk~m ito itr~t itv~z + iu ium + ivb ivv + iwk iwm iwo iws + ixc ixl + iya iyo iyx + izh izr izz + ja jaa~f jah jaj~o jaq jas~u jax~z + jbe jbi~k jbm~o jbr jbt~u jbw + jcs~t + jda jdg jdt + jeb jee jeh~i jek~l jen jer jet~u + jgb jge jgk jgo + jhi jhs + jia~e jig~i jil~m jio jiq jit~v jiy + jje jjr + jka jkm jko~p jkr~s jku + jle jls + jma~d jmi jml jmn jmr~s jmw~x + jna jnd jng jni~j jnl jns + job jod jog jor~s jow + jpa jpr jpx + jqr + jra~b jrr jrt~u + jsl + jua~d juh~i juk~p jur~u juw juy + jv jvd jvn + jwi + jya jye jyy + ka kaa~k kam kao~r kav~y + kba~e kbg~z + kca~z + kda kdc~r kdt~u kdw~z + kea~z + kfa~z + kg kga~b kge~g kgi~y + kha~j khl khn~z + ki kia~j kil~m kio~q kis~z + kj kja~e kjg~v kjx~z + kk kka~z + kl kla~z + km kma~q kms~z + kn kna~b knd~f kni~m kno~z + ko koa koc~i kok~l koo~q kos~w koy~z + kpa~o kpq~u kpw~z + kqa~z + kr kra~f krh~l krn~p krr~z + ks ksa~z + kta~q kts~z + ku kub~q kus~z + kv kva~r kvt~z + kw kwa~p kwr~z + kxa~d kxf kxh~k kxm~t kxv~z + ky kya~z + kza~g kzi kzk~s kzu~z + la laa~j lal~n lap~s lau law~z + lb lbb~c lbe~g lbi~j lbl~o lbq~z + lcc~f lch lcl~m lcp~q lcs + lda~b ldd ldg~q + lea~f leh~z + lfa lfn + lg lga~b lgg~i lgk~o lgq~r lgt~u lgz + lha lhh~i lhl~n lhp lhs~u + li lia~h lij~l lio~s liu~z + lja lje lji ljl ljp ljw~x + lka~e lkh~j lkl~o lkr~u lky + lla~n llp~q lls llu llx + lma~l lmn~r lmu~y + ln lna~b lnd lng~j lnl~n lns lnu lnw lnz + lo loa~c loe~z + lpa lpe lpn~o lpx + lqr + lra lrc lre lrg lri lrk~o lrr lrt lrv lrz + lsa~e lsh~i lsl~p lsr~t lsv~w lsy + lt ltc ltg~i ltn~o lts ltu + lu lua luc~f lui~w luy~z + lv lva lvi lvk lvu + lwa lwe lwg~h lwl~m lwo lws~u lww + lxm + lya lyg lyn + lzh lzl lzn lzz + maa~b mad~g mai~k mam~n map~q mas~x maz + mba~f mbh~z + mca~z + mda~n mdp~z + mea~f meh~w mey~z + mfa~z + mg mga~w mgy~z + mh mha~g mhi~q mhs~u mhw~z + mi mia~r mit~u miw~z + mjb~e mjg~z + mk mka~c mke~z + ml mla~c mle~f mlh~s mlu~x mlz + mma~r mmt~z + mn mna~j mnl~s mnu~z + moa moc~e mog~k mom moo~z + mpa~e mpg~z + mqa~c mqe~z + mr mra~h mrj~z + ms msb~s msu~z + mt mta~y + mua~e mug~k mum~o muq~v mux~z + mva~b mvd~i mvk~l mvn~z + mwa~c mwe~i mwk~w mwz + mxa~z + my myb~c mye~h myj~p myr~s myu~z + mza~e mzg~z + na naa~c nae~t naw~z + nb nba~e nbg~k nbm~w nby + nca~o ncq~u ncx ncz + nd nda~d ndf~n ndp~z + ne nea~k nem~o neq~z + nfa nfd nfl nfr nfu + ng nga~n ngp~z + nha~i nhk nhm~r nht~z + nia~o niq~z + nja~b njd njh~j njl~o njr~u njx~z + nka~k nkm~x nkz + nl nla nlc nle nlg nli~m nlo nlq nlu~z + nma~z + nn nna~n nnp~r nnt~w nny~z + no noa noc~n nop~q nos~w noy~z + npa~b npg~h npl npn~o nps npu npx~y + nqg nqk~o nqq nqt nqy + nr nra~c nre~g nri nrk~n nrp nrr nrt~u nrx nrz + nsa~i nsk~z + ntd~e ntg nti~k ntm nto~p ntr ntu ntw~z + nua~z + nv nvh nvm nvo + nwa~c nwe nwg nwi nwm nwo nwr nww~y + nxa nxd~e nxg nxi nxk~o nxq~r nxx + ny nyb~y + nza~b nzd nzi nzk nzm nzs nzu nzy~z + oaa oac oar oav + obi obk~m obo obr obt~u + oc oca och ocm oco ocu + oda odk odt~u + ofo ofs ofu + ogb~c oge ogg ogo ogu + oht~u + oia oie oin + oj ojb~c ojp ojs ojv~w + oka~e okg~o okr~s oku~v okx okz + ola old~e olk olm olo olr olt~u + om oma~c omg omi omk~l omn~r omt~y + ona~b one ong oni~k onn~p onr~u onw~x + ood oog oon oor~s + opa opk opm opo opt opy + or ora orc ore org~h orn~o orr~x orz + os osa osc osi osn~p ost~u osx + ota~b otd~e oti otk~o otq~u otw~z + oua~b oue oui oum + ovd + owi owl + oyb oyd oym oyy + ozm + pa paa~i pak~m pao~s pau~z + pbb~c pbe~i pbl~p pbr~t pbv pby + pca~n pcp pcw + pda pdc pdi pdn~o pdt~u + pea~b ped~m peo~q pev pex~z + pfa pfe pfl + pga pgd pgg pgi pgk~l pgn pgs pgu pgz + pha phd phg~o phq~r pht~w + pi pia~h pij pil~p pir~z + pjt + pka~c pkg~h pkn~p pkr~u + pl pla~h plj~l pln~o plq~s plu~w ply~z + pma~b pmd~f pmh~o pmq~t pmw~z + pna pnc~e png~z + poc poe~i pok pom~q pos~t pov~z + ppe ppi ppk~q pps~u + pqa pqe pqm pqw + pra prc~i prk~r prt~u prw~x prz + ps psa psc~e psg~i psl~u psw psy + pt pta pth~i ptn~r ptt~w pty + pua~g pui~j pum puo~r put~u puw~y + pwa~b pwg pwi pwm~o pwr pww + pxm + pye pym~n pys pyu pyx~y + pzh pzn + qu qua~d quf~i quk~n qup~s quv~y + qva qvc qve qvh~j qvl~p qvs qvw qvy~z + qwa qwc qwe qwh qwm qws~t + qxa qxc qxh qxl qxn~u qxw + qya qyp + raa~d raf~z + rbb rbk~l rbp + rcf + rdb + rea~b ree reg rei~j rel~n rer~t rey + rga rge rgk rgn rgr~s rgu + rhg rhp + ria~b rif ril~n rir rit~u + rjg rji rjs + rka~b rkh~i rkm rkt rkw + rm rma~i rmk~q rms~x rmz + rn rnb rnd rng rnl rnn rnp rnr rnw + ro roa~g rol~m roo~p ror rou row + rpn rpt + rri rro rrt + rsb rsk~n + rtc rth rtm rts rtw + ru rub~c rue~i ruk ruo~q rut~u ruy~z + rw rwa rwk~m rwo rwr + rxd rxw + ryn rys ryu + rzh + sa saa~f sah~m sao saq~z + sba~z + sc scb sce~i sck~l scn~q scs~x + sd sda~c sde~h sdj~l sdn~v sdx sdz + se sea~w sey~z + sfb sfe sfm sfs sfw + sg sga~e sgg~k sgm~n sgp sgr~u sgw~z + sha~e shg~z + si sia~b sid~m sio~z + sja~b sjd~e sjg sjk~p sjr~u sjw + sk ska~j skm~z + sl sla slc~j sll~n slp~u slw~z + sm sma~c smf~n smp~z + sn snc sne~g sni~s snu~z + so soa~e sog~l son~s sou~z + spb~e spg spi spk~v spx + sq sqa sqh sqj~k sqm~o sqq~u sqx + sr sra~b sre~i srk~o srq~z + ss ssa~v ssx~z + st sta~b std~w sty + su sua~c sue sug sui~k suo suq~t suv~z + sv sva~c sve svk svm svs svx + sw swb swf~g swi~y + sxb~c sxe sxg sxk~o sxr~s sxu sxw + sya~d syi syk~o syr~s syw~y + sza~e szg szl szn szp szs szv~w szy + ta taa~g tai~l tan~s tau~z + tba tbc~z + tca~i tck~q tcs~u tcw~z + tda~o tdq~t tdv tdx~y + te tea~i tek tem~z + tfi tfn~o tfr tft + tg tga~f tgh~j tgn~z + th thd~f thh~i thk~n thp~v thy~z + ti tia tic tif~q tis~z + tja tjg tji~j tjl~p tjs tju tjw + tk tka~b tkd~g tkl~n tkp~x tkz + tla~d tlf~v tlx~y + tma~o tmq~w tmy~z + tn tna~d tng~i tnk~z + to tob~d tof~m too~s tou~z + tpa tpc tpe~g tpi~r tpt~z + tqb tql~r tqt~u tqw + tr tra~z + ts tsa~e tsg~m tsp~z + tt tta~p ttr~w tty~z + tua~j tul~q tus~z + tva tvd~e tvk~o tvs~u tvw~y + twa~h twl~r twt~u tww~y + txa~c txe txg~j txm~o txq~u txx~y + ty tya tye tyh~j tyl tyn typ tyr~v tyx~z + tza tzh tzj tzl~o tzx + uam~n uar + uba ubi ubl ubr ubu uby + uda ude udg udi~j udl~m udu + ues + ufi + ug uga~b uge ugh ugn~o ugy + uha uhn + uis uiv + uji + uk uka ukg~i ukk~l ukp~q uks uku~w uky + ula~c ule~f uli ulk~n ulu ulw + uma~d umg umi umm~p umr~s + una une ung uni unk unm~n unr unu unx unz + uon + upi upv + ur ura~c ure~p urr urt~z + usa ush~i usk usp uss usu + uta ute uth utp utr utu + uum uur uuu + uve uvh uvl + uwa + uya + uz uzs + vaa vae~j val~p var~s vau~v vay + vbb vbk + ve vec~d vel~m veo~p ver + vgr vgt + vi vic~d vif~g vil vin vis~t viv + vka vkj~p vkt~u vkz + vlp vls + vma~m vmp~s vmu~z + vnk vnm vnp + vo vor vot + vra vro vrs~t + vsi vsl vsv + vto + vum~n vut + vwa + wa waa~z + wba~b wbe~f wbh~m wbp~t wbv~w + wca wci + wdd wdg wdj~k wdt~u wdy + wea wec~d weg~i wem~p wer~u wew + wfg + wga~b wgg wgi wgo wgu wgy + wha whg whk whu + wib~c wie~n wir wiu~v wiy + wja wji + wka~b wkd wkl wkr wku wkw wky + wla wlc wle wlg~i wlk~m wlo wlr~s wlu~y + wma~e wmg~i wmm~o wms~t wmw~x + wnb~e wng wni wnk wnm~p wnu wnw wny + wo woa~g woi wok wom~o wor~s wow woy + wpc + wrb wrg~i wrk~p wrr~s wru~z + wsa wsg wsi wsk wsr~s wsu~v + wtf wth~i wtk wtm wtw + wua~b wud wuh wul~n wur wut~v wux~y + wwa~b wwo wwr www + wxa wxw + wyb wyi wym~n wyr wyy + xaa~e xag xai~w xay + xbb~e xbg xbi~j xbm~p xbr xbw xby + xcb~c xce xcg~h xcl~o xcr xct~w xcy + xda xdc xdk xdm xdo xdq xdy + xeb xed xeg xel~m xep xer~u + xfa + xga~b xgd xgf~g xgi xgl~n xgr xgu xgw + xh xha xhc~e xhm xhr xht~v + xib xii xil xin xir~s xiv xiy + xjb xjt + xka~g xki~l xkn~z + xla~e xlg xli xln~p xls xlu xly + xma~h xmj~z + xna~b xnd xng~k xnm~o xnq~u xny~z + xoc~d xog xoi xok xom~p xor xow + xpa~d xpf~z + xqa xqt + xra~b xrd~e xrg xri xrm~n xrr xrt~u xrw + xsa~e xsh~i xsm~s xsu~v xsy + xta~e xtg~j xtl~w xty + xua~b xud xug xuj xul~p xur xut~u + xve xvi xvn~o xvs + xwa xwc~e xwg xwj~l xwo xwr xwt xww + xxb xxk xxm xxr xxt + xya~b xyj~l xyt xyy + xzh xzm xzp + yaa~z + yba~b ybe ybh~o ybx~y + ych ycl ycn ycp + yda yde ydg ydk + yea yec yee yei~j yel yer~v yey + yga ygi ygl~m ygp ygr~s ygu ygw + yha yhd yhl yhs + yi yia yif~n yip~v yix yiz + yka ykg yki ykk~o ykr ykt~u yky + yla~b yle ylg yli yll~o ylr ylu yly + ymb~e ymg~i ymk~s ymx ymz + yna ynd~e yng ynk~l ynn~o ynq yns ynu + yo yob yog yoi yok~n yot yox~y + ypa~b ypg~h ypk ypm~p ypz + yra~b yre yrk~o yrs yrw yry + ysc~d ysg ysl~p ysr~s ysy + yta ytl ytp ytw yty + yua~g yui~n yup~r yut yuw~z + yva yvt + ywa ywg ywl ywn ywq~r ywt~u yww + yxa yxg yxl~m yxu yxy + yyr yyu yyz + yzg yzk + za zaa~h zaj~m zao~z + zba zbc zbe zbl zbt~u zbw + zca zcd zch + zdj + zea zeg~h zen + zga~b zgh zgm~n zgr + zh zhb zhd zhi zhn zhw~x + zia~b zik~n ziw ziz + zka~b zkd zkg~h zkk zkn~p zkr zkt~v zkz + zla zle zlj zlm~n zlq zls zlw + zma~z + zna znd~e zng znk zns + zoc zoh zom zoo zoq~s + zpa~z + zqe + zra zrg zrn~p zrs + zsa zsk~l zsr zsu + zte ztg ztl~n ztp~q zts~u ztx~y + zu zua zuh zum~n zuy + zwa + zyg zyj zyn zyp + zza zzj + + + mis mul + zxx + + + aam adp agp ais ajt~u als aoh arb asd aue ayr ayx~y azj + baz bbz bcc bcl bgm bh bhk bic bij bjd bjq bkb blg bmy bpb btb btl bxk bxr bxx byy + cbe cbh cca ccq cdg cjr cka cld cmk cmn cnr coy cqu cug cum cwd + daf dap dgo dgu dha dhd dik diq dit djl dkl drh drr drw dud duj dwl dzd + ekc ekk elp emk emo esk + fat fuc + gav gaz gbc gbo gfx ggn~o ggr gio gji gli gno gti gug guv gya + hdn hea him hrr + iap ibi ike ill ilw ime in iw izi + jar jeg ji jw + kbf kdv kgc~d kgh khk kjf kmr knc kng knn koj kox kpp kpv krm ktr kvs kwq kxe kxl kxu kzh kzj kzt + lak lba lbk leg lii llo lmm lmz lno lsg lvs + meg mgx mhh mhr mja mld mnk mnt mo mof mst mup mvm mwd mwj mwx~y myd myi myq myt + nad nbf nbx ncp ngo nln nlr nns nnx noo npi nts nxu + ojg ome ory oun + pat pbu pbz pcr pes pgy pii plp plt pmc pmu pnb pod ppa ppr prb prs pry puk puz + quz + rie rmr rmy rna rsi + sap sca sdm sgl sgo sh skk smd snb snh spy src sul~m svr swc swh + tbb tdu tgg thc thw~x tid~e tkk tl tlw tmp tne~f toe tsf ttq tw + umu unp uok uun uzn + vki + wgw wit wiw wra wrd wya + xba xbx xia xip xkh xpe xrq xsj xsl xtz + ybd ydd yds yen yiy yma ymt ynh yos yri yuu + zai zir zsm zyb + + + qaa~z qba~z qca~z qda~z qea~z qfa~y + + + qfz qga~z qha~z qia~z qja~z qka~z qla~z qma~z qna~z qoa~z qpa~z qqa~z qra~z qsa~z qta~z + + + und + + + diff --git a/Assets/Resources/cldr/common/validity/language.xml.meta b/Assets/Resources/cldr/common/validity/language.xml.meta new file mode 100644 index 0000000..7dbcb32 --- /dev/null +++ b/Assets/Resources/cldr/common/validity/language.xml.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 5c2d9503edd6718449f832993cd5c215 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/cldr/common/validity/region.xml b/Assets/Resources/cldr/common/validity/region.xml new file mode 100644 index 0000000..c767933 --- /dev/null +++ b/Assets/Resources/cldr/common/validity/region.xml @@ -0,0 +1,79 @@ + + + + + + + + AC~G AI AL~M AO AQ~U AW~X AZ + BA~B BD~J BL~O BQ~T BV~W BY~Z + CA CC~D CF~I CK~R CU~Z + DE DG DJ~K DM DO DZ + EA EC EE EG~H ER~T + FI~K FM FO FR + GA~B GD~I GL~N GP~U GW GY + HK HM~N HR HT~U + IC~E IL~O IQ~T + JE JM JO~P + KE KG~I KM~N KP KR KW KY~Z + LA~C LI LK LR~V LY + MA MC~H MK~Z + NA NC NE~G NI NL NO~P NR NU NZ + OM + PA PE~H PK~N PR~T PW PY + QA + RE RO RS RU RW + SA~E SG~O SR~T SV SX~Z + TA TC~D TF~H TJ~O TR TT TV~W TZ + UA UG UM US UY~Z + VA VC VE VG VI VN VU + WF WS + XK + YE YT + ZA ZM ZW + + + XA~B + + + 001~3 005 009 011 013~5 017~9 021 029 030 034~5 039 053~4 057 061 + 142~3 145 150~1 154~5 + 202 + 419 + EU EZ + QO + UN + + + AN + BU + CS + DD + FX + NT + QU + SU + TP + YD YU + ZR + + + AA + QM~N QP~T QV~Z + + + XC~J XL~Z + + + ZZ + + + diff --git a/Assets/Resources/cldr/common/validity/region.xml.meta b/Assets/Resources/cldr/common/validity/region.xml.meta new file mode 100644 index 0000000..b9d6512 --- /dev/null +++ b/Assets/Resources/cldr/common/validity/region.xml.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 1506f1ea2ae5f6a4d8b5cd4923bad76e +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/cldr/common/validity/script.xml b/Assets/Resources/cldr/common/validity/script.xml new file mode 100644 index 0000000..021922b --- /dev/null +++ b/Assets/Resources/cldr/common/validity/script.xml @@ -0,0 +1,58 @@ + + + + + + + + Adlm Aghb Ahom Arab Armi Armn Avst + Bali Bamu Bass Batk Beng Bhks Bopo Brah~i Bugi Buhd + Cakm Cans Cari Cham Cher Chrs Copt Cpmn Cprt Cyrl + Deva Diak Dogr Dsrt Dupl + Egyp Elba Elym Ethi + Geor Glag Gong Gonm Goth Gran Grek Gujr Guru + Hanb Hang Hani Hano Hans~t Hatr Hebr Hira Hluw Hmng Hmnp Hrkt Hung + Ital + Jamo Java Jpan + Kali Kana Kawi Khar Khmr Khoj Kits Knda Kore Kthi + Lana Laoo Latn Lepc Limb Lina~b Lisu Lyci Lydi + Mahj Maka Mand Mani Marc Medf Mend Merc Mero Mlym Modi Mong Mroo Mtei Mult Mymr + Nagm Nand Narb Nbat Newa Nkoo Nshu + Ogam Olck Orkh Orya Osge Osma Ougr + Palm Pauc Perm Phag Phli Phlp Phnx Plrd Prti + Rjng Rohg Runr + Samr Sarb Saur Sgnw Shaw Shrd Sidd Sind Sinh Sogd Sogo Sora Soyo Sund Sylo Syrc + Tagb Takr Tale Talu Taml Tang Tavt Telu Tfng Tglg Thaa Thai Tibt Tirh Tnsa Toto + Ugar + Vaii Vith + Wara Wcho + Xpeo Xsux + Yezi Yiii Zanb + + + Aran + Qaag + Zinh Zmth Zsye Zsym Zxxx Zyyy + + + Qaai + + + Qaaa~f Qaah Qaaj~p + + + Qaaq~z Qaba~x + + + Zzzz + + + diff --git a/Assets/Resources/cldr/common/validity/script.xml.meta b/Assets/Resources/cldr/common/validity/script.xml.meta new file mode 100644 index 0000000..ea5e14a --- /dev/null +++ b/Assets/Resources/cldr/common/validity/script.xml.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: ac3294783975d1541807d312b8e99cba +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/cldr/common/validity/subdivision.xml b/Assets/Resources/cldr/common/validity/subdivision.xml new file mode 100644 index 0000000..f498a73 --- /dev/null +++ b/Assets/Resources/cldr/common/validity/subdivision.xml @@ -0,0 +1,268 @@ + + + + + + + + ad02~8 + aeaj aeaz aedu aefu aerk aesh aeuq + afbal~m afbdg afbds afbgl afday affra affyb afgha afgho afhel afher afjow afkab afkan afkap afkdz afkho afknr aflag aflog afnan afnim afnur afpan afpar afpia afpka afsam afsar aftak afuru afwar afzab + ag03~8 ag10~1 + al01~9 al10~2 + amag amar amav amer amgr amkt amlo amsh amsu amtv amvd + aobgo aobgu aobie aocab aoccu aocnn~o aocus aohua aohui aolno aolsu aolua aomal aomox aonam aouig aozai + ara~h arj~n arp~z + at1~9 + auact aunsw aunt auqld ausa autas auvic auwa + azabs azaga azagc azagm azags azagu azast azba azbab azbal azbar azbey azbil azcab azcal azcul azdas azfuz azga azgad azgor azgoy azgyg azhac azimi azism azkal azkan azkur azla azlac azlan azler azmas azmi azna aznef aznv aznx azogu azord azqab azqax azqaz azqba azqbi azqob azqus azsa azsab azsad azsah azsak~l azsar azsat azsbn azsiy azskr azsm azsmi azsmx azsr azsus aztar aztov azuca azxa azxac azxci azxiz azxvd azyar azye azyev azzan azzaq~r + babih babrc basrp + bb01~9 bb10~1 + bd01~9 bd10~9 bd20~9 bd30~9 bd40~9 bd50~9 bd60~4 bda~h + bebru bevan bevbr bevlg bevli bevov bevwv bewal bewbr bewht bewlg bewlx bewna + bf01~9 bf10~3 bfbal~n bfbaz bfbgr bfblg bfblk bfcom bfgan bfgna bfgou bfhou bfiob bfkad bfken bfkmd bfkmp bfkop bfkos~t bfkow bfler bflor bfmou bfnam bfnao bfnay bfnou bfoub bfoud bfpas bfpon bfsen bfsis bfsmt bfsng bfsom bfsor bftap bftui bfyag bfyat bfzir bfzon bfzou + bg01~9 bg10~9 bg20~8 + bh13~5 bh17 + bibb bibl~m bibr bica bici bigi biki bikr biky bima bimu bimw bimy bing birm birt biry + bjak~l bjaq bjbo bjco bjdo bjko bjli bjmo bjou bjpl bjzo + bnbe bnbm bnte bntu + bob~c boh bol bon~p bos~t + bqbo bqsa bqse + brac bral~m brap brba brce brdf bres brgo brma brmg brms~t brpa~b brpe brpi brpr brrj brrn~o brrr~s brsc brse brsp brto + bsak bsbi bsbp bsby bsce bsci bsck bsco bscs bseg bsex bsfp bsgc bshi bsht bsin bsli bsmc bsmg bsmi bsne bsno~p bsns bsrc bsri bssa bsse bsso bsss bssw bswg + bt11~5 bt21~4 bt31~4 bt41~5 btga btty + bwce bwch bwfr bwga bwgh bwjw bwkg bwkl bwkw bwlo bwne bwnw bwse bwso~p bwst + bybr byhm byho byhr byma bymi byvi + bzbz bzcy bzczl bzow bzsc bztol + caab cabc camb canb canl cans~u caon cape caqc cask cayt + cdbc cdbu cdeq cdhk~l cdhu cdit cdkc cdke cdkg cdkl cdkn cdks cdlo cdlu cdma cdmn~o cdnk cdnu cdsa cdsk cdsu cdta cdto cdtu + cfac cfbb cfbgf cfbk cfhk cfhm cfhs cfkb cfkg cflb cfmb cfmp cfnm cfop cfse cfuk cfvk + cg11~6 cg2 cg5 cg7~9 cgbzv + chag chai char chbe chbl chbs chfr chge chgl chgr chju chlu chne chnw chow chsg~h chso chsz chtg chti chur chvd chvs chzg~h + ciab cibs cicm cidn cigd cilc cilg cimg cism cisv civb ciwr ciym cizz + clai clan clap clar clat clbi clco clli clll cllr clma clml clnb clrm clta clvs + cmad cmce cmen cmes cmlt cmno cmnw cmou cmsu cmsw + cnah cnbj cncq cnfj cngd cngs cngx cngz cnha~b cnhe cnhi cnhk~l cnhn cnjl cnjs cnjx cnln cnmo cnnm cnnx cnqh cnsc~d cnsh cnsn cnsx cntj cntw cnxj cnxz cnyn cnzj + coama coant coara coatl cobol coboy cocal cocaq cocas cocau coces cocho cocor cocun codc cogua coguv cohui colag comag comet conar consa coput coqui coris cosan cosap cosuc cotol covac covau covid + cra crc crg~h crl crp crsj + cu01 cu03~9 cu10~6 cu99 + cvb cvbr cvbv cvca cvcf cvcr cvma cvmo cvpa cvpn cvpr cvrb cvrg cvrs cvs cvsd cvsf cvsl~m cvso cvss cvsv cvta cvts + cy01~6 + cz10 cz20 cz201~9 cz20a~c cz31 cz311~7 cz32 cz321~7 cz41 cz411~3 cz42 cz421~7 cz51 cz511~4 cz52 cz521~5 cz53 cz531~4 cz63 cz631~5 cz64 cz641~7 cz71 cz711~5 cz72 cz721~4 cz80 cz801~6 + debb debe debw deby dehb dehe dehh demv deni denw derp desh desl desn dest deth + djar~s djdi~j djob djta + dk81~5 + dm02~9 dm10~1 + do01~9 do10~9 do20~9 do30~9 do40~2 + dz01~9 dz10~9 dz20~9 dz30~9 dz40~8 + eca~i ecl~p ecr~s ecsd~e ect~u ecw~z + ee130 ee141~2 ee171 ee184 ee191 ee198 ee205 ee214 ee245 ee247 ee251 ee255 ee272 ee283~4 ee291 ee293 ee296 ee303 ee305 ee317 ee321 ee338 ee353 ee37 ee39 ee424 ee430~2 ee441~2 ee446 ee45 ee478 ee480 ee486 ee50 ee503 ee511 ee514 ee52 ee528 ee557 ee56 ee567 ee586 ee60 ee615 ee618 ee622 ee624 ee638 ee64 ee651 ee653 ee661 ee663 ee668 ee68 ee689 ee698 ee708 ee71 ee712 ee714 ee719 ee726 ee732 ee735 ee74 ee784 ee79 ee792~3 ee796 ee803 ee809 ee81 ee824 ee834 ee84 ee855 ee87 ee890 ee897 ee899 ee901 ee903 ee907 ee917 ee919 ee928 + egalx egasn egast egba egbh egbns egc egdk egdt egfym eggh eggz egis egjs egkb egkfs egkn eglx egmn egmnf egmt egpts egshg egshr egsin egsuz egwad + eran erdk erdu ergb erma ersk + esa esab esal esan esar~s esav esb esba esbi esbu esc esca~c esce escl~o escr~u esex esga esgc esgi esgr esgu esh eshu esib esj esl esle eslo eslu esm esma esmc~d esml esmu esna esnc eso esor esp espm espo espv esri ess essa esse essg esso esss est este~f esto esv esva esvc esvi esz esza + etaa etaf etam etbe etdd etga etha etor etsi etsn~o etti + fi02~9 fi10~9 + fj01~9 fj10~4 fjc fje fjn fjr fjw + fmksa fmpni fmtrk fmyap + fr01~9 fr10~9 fr20r fr21~9 fr2a~b fr30~9 fr40~9 fr50~9 fr60~9 fr69m fr6ae fr70~4 fr75c fr76~9 fr80~9 fr90~5 fr971~4 fr976 frara frbfc frbre frcvl frges frhdf fridf frnaq frnor frocc frpac frpdl + ga1~9 + gbabc~e gbagb gbagy gband gbann gbans gbbas gbbbd gbbcp gbbdf~g gbben gbbex gbbfs gbbge gbbgw gbbir gbbkm gbbne gbbnh gbbns gbbol gbbpl gbbrc~d gbbry gbbst gbbur gbcam gbcay gbcbf gbccg gbcgn gbche gbchw gbcld gbclk gbcma gbcmd gbcmn gbcon gbcov gbcrf gbcry gbcwy gbdal gbdby gbden gbder gbdev gbdgy gbdnc~d gbdor gbdrs gbdud gbdur gbeal gbeay gbedh gbedu gbeln gbels gbenf~g gberw gbery gbess gbesx gbfal gbfif gbfln gbfmo gbgat gbglg gbgls gbgre gbgwn gbhal~m gbhav gbhck gbhef gbhil gbhld gbhmf gbhns gbhpl gbhrt gbhrw gbhry gbios gbiow gbisl gbivc gbkec gbken gbkhl gbkir gbktt gbkwl gblan gblbc gblbh gblce gblds gblec gblew gblin gbliv gblnd gblut gbman gbmdb gbmdw gbmea gbmik gbmln gbmon gbmrt gbmry gbmty gbmul gbnay gbnbl gbnel gbnet gbnfk gbngm gbnir gbnlk gbnln gbnmd gbnsm gbnth gbntl gbntt gbnty gbnwm gbnwp gbnyk gbold gbork gboxf gbpem gbpkn gbply gbpor gbpow gbpte gbrcc gbrch gbrct gbrdb gbrdg gbrfw gbric gbrot gbrut gbsaw gbsay gbscb gbsct gbsfk gbsft gbsgc gbshf gbshn gbshr gbskp gbslf~g gbslk gbsnd gbsol~m gbsos gbsry gbste gbstg~h gbstn gbsts~t gbsty gbswa gbswd gbswk gbtam gbtfw gbthr gbtob gbtof gbtrf gbtwh gbvgl gbwar gbwbk gbwdu gbwft gbwgn gbwil gbwkf gbwll gbwln gbwls gbwlv gbwnd gbwnm gbwok gbwor gbwrl gbwrt gbwrx gbwsm gbwsx gbyor gbzet + gd01~6 gd10 + geab geaj gegu geim geka gekk gemm gerl gesj~k gesz getb + ghaa ghaf ghah ghbe ghbo ghcp ghep ghne ghnp ghot ghsv ghtv ghue ghuw ghwn ghwp + glav glku glqe glqt glsm + gmb gml~n gmu gmw + gnb gnbe~f gnbk gnc gnco gnd gndb gndi gndl gndu gnf gnfa gnfo gnfr gnga gngu gnk gnka~b gnkd~e gnkn~o gnks gnl gnla gnle gnlo gnm gnmc~d gnml~m gnn gnnz gnpi gnsi gnte gnto gnyo + gqan gqbn gqbs gqc gqcs gqdj gqi gqkn gqli gqwn + gr69 gra~m + gt01~9 gt10~9 gt20~2 + gwba gwbl~m gwbs gwca gwga gwl gwn gwoi gwqu gws gwto + gyba gycu gyde gyeb gyes gyma gypm gypt gyud gyut + hnat hnch hncl~m hncp hncr hnep hnfm hngd hnib hnin hnle hnlp hnoc hnol hnsb hnva hnyo + hr01~9 hr10~9 hr20~1 + htar htce htga htnd~e htni htno htou htsd~e + huba hubc hube hubk hubu hubz hucs hude hudu hueg huer hufe hugs hugy huhb huhe huhv hujn huke hukm hukv humi hunk huno huny hupe hups husd husf hush husk husn~o huss~t husz hutb huto huva huve huvm huza huze + idac idba~b idbe idbt idgo idja~b idji idjk idjt idjw idka~b idki idkr~u idla idma idml idmu idnb idnt~u idpa~b idpp idri idsa~b idsg idsl~n idsr~u idyo + iec iece iecn~o iecw ied iedl ieg ieke iekk ieky iel ield ielh ielk ielm iels iem iemh iemn~o ieoy iern ieso ieta ieu iewd iewh ieww~x + ild ilha iljm ilm ilta ilz + inan inap inar~s inbr inch inct indh indl inga ingj inhp inhr injh injk inka inkl inla inld inmh inml inmn inmp inmz innl inor inpb inpy inrj insk intg intn intr inup inut inwb + iqan iqar iqba~b iqbg iqda iqdi iqdq iqka iqki iqkr iqma iqmu iqna iqni iqqa iqsd iqsu iqwa + ir00~9 ir10~9 ir20~9 ir30 + is1~8 isakh isakn isaku isarn isasa isbla isblo isbog isbol isdab isdav iseom iseyf isfjd isfjl isfla isflr isgar isgog isgrn isgru isgry ishaf ishel ishrg ishru ishut ishuv ishva ishve isisa iskal iskjo iskop islan ismos ismul ismyr isnor isrge isrgy isrhh isrkn isrkv issbh issbt issdn issdv issel issfa isshf isskf~g issko issku issnf issog issol isssf issss isstr issty issvg istal isthg istjo isvem isver isvop + it21 it23 it25 it32 it34 it36 it42 it45 it52 it55 it57 it62 it65 it67 it72 it75 it77~8 it82 it88 itag ital itan itap~r itat itav itba itbg itbi itbl itbn~o itbr~t itbz itca~b itce itch itcl itcn~o itcr~t itcz iten itfc itfe itfg itfi itfm itfr itge itgo itgr itim itis itkr itlc itle itli itlo itlt~u itmb~c itme itmi itmn~o itms~t itna itno itnu itor itpa itpc~e itpg itpi itpn~o itpr itpt~v itpz itra itrc itre itrg itri itrm~o itsa itsi itso~p itsr~s itsu~v itta itte ittn~p ittr~s ittv itud itva~c itve itvi itvr itvt itvv + jm01~9 jm10~4 + joaj joam joaq joat joaz joba joir joja joka joma jomd jomn + jp01~9 jp10~9 jp20~9 jp30~9 jp40~7 + ke01~9 ke10~9 ke20~9 ke30~9 ke40~7 + kgb~c kggb kggo kgj kgn~o kgt kgy + kh1 kh10~9 kh2 kh20~5 kh3~9 + kig kil kip + kma kmg kmm + kn01~9 kn10~3 kn15 knk knn + kp01~9 kp10 kp13~4 + kr11 kr26~9 kr30~1 kr41~9 kr50 + kwah kwfa kwha kwja kwku kwmu + kzakm kzakt kzala kzalm kzast kzaty kzkar kzkus kzkzy kzman kzpav kzsev kzshy kzvos kzyuz kzzap kzzha + laat labk~l lach laho lakh lalm lalp laou laph lasl lasv lavi lavt laxa laxe laxi laxs + lbak lbas lbba lbbh~i lbja lbjl lbna + lc01~3 lc05~8 lc10~2 + li01~9 li10~1 + lk1 lk11~3 lk2 lk21~3 lk3 lk31~3 lk4 lk41~5 lk5 lk51~3 lk6 lk61~2 lk7 lk71~2 lk8 lk81~2 lk9 lk91~2 + lrbg lrbm lrcm lrgb lrgg lrgk lrgp lrlo lrmg lrmo lrmy lrni lrrg lrri lrsi + lsa~h lsj~k + lt01~9 lt10~9 lt20~9 lt30~9 lt40~9 lt50~9 lt60 ltal ltkl ltku ltmr ltpn ltsa ltta ltte ltut ltvl + luca lucl ludi luec lues lugr lulu lume lurd lurm luvd luwi + lv002 lv007 lv011 lv015~6 lv022 lv026 lv033 lv041~2 lv047 lv050 lv052 lv054 lv056 lv058~9 lv062 lv067~8 lv073 lv077 lv080 lv087~9 lv091 lv094 lv097 lv099 lv101~2 lv106 lv111~3 lvdgv lvjel lvjur lvlpx lvrez lvrix lvven + lyba lybu lydr lygt lyja lyjg lyji lyju lykf lymb lymi~j lymq lynl lynq lysb lysr lytb lywa lywd lyws lyza + ma01~9 ma10~2 maagd maaou maasz maazi mabem maber~s mabod mabom mabrr macas mache machi macht madri maerr maesi maesm mafah mafes mafig mafqh mague~f mahaj mahao mahoc maifr maine majdi majra maken makes makhe makhn~o malaa malar mamar mamdf mamed mamek mamid mamoh mamou manad manou maoua maoud maouj maouz marab mareh masaf masal masef maset masib masif masik~l maskh mataf matai matao matar matat mataz matet matin matiz matng matnt mayus mazag + mccl mcco mcfo mcga mcje mcla mcma mcmc mcmg mcmo mcmu mcph mcsd mcso~p mcsr mcvr + mdan mdba mdbd mdbr~s mdca mdcl~m mdcr~u mddo mddr mddu mded mdfa mdfl mdga mdgl mdhi mdia mdle mdni mdoc mdor mdre mdri mdsd mdsi mdsn~o mdst mdsv mdta mdte mdun + me01~9 me10~9 me20~4 + mga mgd mgf mgm mgt~u + mhalk~l mharn mhaur mhebo mheni mhjab mhjal mhkil mhkwa mhl mhlae mhlib mhlik mhmaj mhmal mhmej mhmil mhnmk mhnmu mhron mht mhuja mhuti mhwth mhwtj + mk101~9 mk201~9 mk210~1 mk301 mk303~4 mk307~8 mk310~3 mk401~9 mk410 mk501~9 mk601~9 mk701~6 mk801~9 mk810~7 + ml1 ml10 ml2~9 mlbko + mm01~7 mm11~8 + mn035 mn037 mn039 mn041 mn043 mn046~7 mn049 mn051 mn053 mn055 mn057 mn059 mn061 mn063~5 mn067 mn069 mn071 mn073 mn1 + mr01~9 mr10~5 + mt01~9 mt10~9 mt20~9 mt30~9 mt40~9 mt50~9 mt60~8 + muag mubl mucc mufl mugp mumo mupa mupl mupw muro murr musa + mv00~5 mv07~8 mv12~4 mv17 mv20 mv23~9 mvmle + mwba mwbl mwc mwck mwcr mwct mwde mwdo mwkr~s mwli mwlk mwmc mwmg~h mwmu mwmw mwmz mwn mwnb mwne mwni mwnk mwns mwnu mwph mwru mws mwsa mwth mwzo + mxagu mxbcn mxbcs mxcam mxchh mxchp mxcmx mxcoa mxcol mxdur mxgro mxgua mxhid mxjal mxmex mxmic mxmor mxnay mxnle mxoax mxpue mxque mxroo mxsin mxslp mxson mxtab mxtam mxtla mxver mxyuc mxzac + my01~9 my10~6 + mza~b mzg mzi mzl mzmpm mzn mzp~q mzs~t + naca naer naha naka nake nakh naku nakw naod naoh naon naos~t naow + ne1~8 + ngab ngad ngak ngan ngba ngbe ngbo ngby ngcr ngde ngeb nged ngek ngen ngfc nggo ngim ngji ngkd~e ngkn~o ngkt ngkw ngla ngna ngni ngog ngon ngos ngoy ngpl ngri ngso ngta ngyo ngza + nian nias nibo nica nici nico nies nigr niji nile nimd nimn nims~t nins niri nisj + nlbq1~3 nldr nlfl nlfr nlge nlgr nlli nlnb nlnh nlov nlut nlze nlzh + no03 no11 no15 no18 no21~2 no30 no34 no38 no42 no46 no50 no54 + np1~5 npba npbh npdh npga npja npka npko nplu npma npme npna npp1~7 npra npsa npse + nr01~9 nr10~4 + nzauk nzbop nzcan nzcit nzgis nzhkb nzmbh nzmwt nznsn nzntl nzota nzstl nztas nztki nzwgn nzwko nzwtc + ombj ombs ombu omda omma ommu omsj omss omwu omza omzu + pa1 pa10 pa2~9 paem paky panb pant + peama peanc peapu peare peaya pecaj pecal pecus pehuc pehuv peica pejun pelal~m pelim pelma pelor pemdd pemoq pepas pepiu pepun pesam petac petum peuca + pgcpk pgcpm pgebr pgehg pgepw pgesw pggpk pghla pgjwk pgmba pgmpl~m pgmrl pgncd pgnik pgnpp pgnsb pgsan pgshm pgwbk pgwhm pgwpd + ph00~3 ph05~9 ph10~5 ph40~1 phabr phagn phags phakl phalb phant phapa phaur phban phbas phben phbil phboh phbtg phbtn phbuk~l phcag phcam~n phcap phcas~t phcav phceb phcom phdao phdas phdav phdin phdvo pheas phgui phifu phili philn phils phisa phkal phlag phlan phlas phley phlun phmad phmag phmas phmdc phmdr phmou phmsc phmsr phnco phnec phner phnsa phnue phnuv phpam~n phplw phque phqui phriz phrom phsar phsco phsig phsle phslu phsor phsuk phsun phsur phtar phtaw phwsa phzan phzas phzmb phzsi + pkba pkgb pkis pkjk pkkp pkpb pksd + pl02 pl04 pl06 pl08 pl10 pl12 pl14 pl16 pl18 pl20 pl22 pl24 pl26 pl28 pl30 pl32 + psbth psdeb psgza pshbn psjem~n psjrh pskys psnbs psngz psqqa psrbh psrfh psslt pstbs pstkm + pt01~9 pt10~8 pt20 pt30 + pw002 pw004 pw010 pw050 pw100 pw150 pw212 pw214 pw218 pw222 pw224 pw226~8 pw350 pw370 + py1 py10~6 py19 py2~9 pyasu + qada qakh qams qara qash qaus qawa qaza + roab roag roar rob robc robh robn robr robt robv robz rocj rocl rocs~t rocv rodb rodj rogj rogl rogr rohd rohr roif roil rois romh romm roms ront root roph rosb rosj rosm rosv rotl~m rotr rovl rovn rovs + rs00~9 rs10~9 rs20~9 rskm rsvo + ruad rual rualt ruamu ruark ruast ruba rubel rubry rubu ruce ruche ruchu rucu ruda ruin ruirk ruiva rukam rukb~c rukda rukem rukgd rukgn rukha rukhm rukir rukk~l ruklu ruko rukos rukr rukrs rukya rulen rulip rumag rume rumo rumos rumow rumur runen rungr runiz runvs ruoms ruore ruorl ruper rupnz rupri rupsk ruros rurya rusa rusak rusam rusar ruse rusmo ruspe rusta rusve ruta rutam rutom rutul rutve ruty rutyu ruud ruuly ruvgg ruvla ruvlg ruvor ruyan ruyar ruyev ruzab + rw01~5 + sa01~9 sa10~2 sa14 + sbce sbch sbct sbgu sbis sbmk~l sbrb sbte sbwe + sc01~9 sc10~9 sc20~7 + sddc sdde sddn sdds sddw sdgd sdgk sdgz sdka sdkh sdkn sdks sdnb sdno sdnr sdnw sdrs sdsi + seab~c sebd sec~i sek sem~o ses~u sew~z + sg01~5 + shac shhl + si001~9 si010~9 si020~9 si030~9 si040~9 si050~9 si060~9 si070~9 si080~9 si090~9 si100~9 si110~9 si120~9 si130~9 si140~4 si146~9 si150~9 si160~9 si170~9 si180~9 si190~9 si200~9 si210~3 + skbc skbl skki skni skpv skta sktc skzi + sle sln slnw sls slw + sm01~9 + sndb sndk snfk snka snkd~e snkl snlg snmt snse snsl sntc snth snzg + soaw sobk sobn sobr soby soga soge sohi sojd sojh somu sonu sosa sosd sosh soso soto sowo + srbr srcm srcr srma srni srpm srpr srsa srsi srwa + ssbn ssbw ssec ssee ssew ssjg sslk ssnu ssuy sswr + st01~6 stp + svah svca svch svcu svli svmo svpa svsa svsm svso svss svsv svun svus + sydi sydr sydy syha syhi syhl~m syid syla syqu syra syrd sysu syta + szhh szlu szma szsh + tdba tdbg tdbo tdcb tdee tdeo tdgr tdhl tdka tdlc tdlo tdlr tdma tdmc tdme tdmo tdnd tdod tdsa tdsi tdta tdti tdwf + tgc tgk tgm tgp tgs + th10~9 th20~7 th30~9 th40~9 th50~8 th60~7 th70~7 th80~6 th90~6 ths + tjdu tjgb tjkt tjra tjsu + tlal tlan tlba tlbo tlco tldi tler tlla tlli tlmf tlmt tloe tlvi + tma~b tmd tml~m tms + tn11~4 tn21~3 tn31~4 tn41~3 tn51~3 tn61 tn71~3 tn81~3 + to01~5 + tr01~9 tr10~9 tr20~9 tr30~9 tr40~9 tr50~9 tr60~9 tr70~9 tr80~1 + ttari ttcha ttctt ttdmn ttmrc ttped ttpos ttprt ttptf ttsfo ttsge ttsip ttsjl tttob tttup + tvfun tvnit tvnkf tvnkl tvnma tvnmg tvnui tvvai + twcha twcyi twcyq twhsq twhsz twhua twila twkee twkhh twkin twlie twmia twnan twnwt twpen twpif twtao twtnn twtpe twttt twtxg twyun + tz01~9 tz10~9 tz20~9 tz30~1 + ua05 ua07 ua09 ua12 ua14 ua18 ua21 ua23 ua26 ua30 ua32 ua35 ua40 ua43 ua46 ua48 ua51 ua53 ua56 ua59 ua61 ua63 ua65 ua68 ua71 ua74 ua77 + ug101~9 ug110~9 ug120~6 ug201~9 ug210~9 ug220~9 ug230~7 ug301~9 ug310~9 ug320~9 ug330~7 ug401~9 ug410~9 ug420~9 ug430~5 ugc uge ugn ugw + um67 um71 um76 um79 um81 um84 um86 um89 um95 + usak~l usar usaz usca usco usct usdc usde usfl usga ushi usia usid usil usin usks usky usla usma usmd~e usmi usmn~o usms~t usnc~e usnh usnj usnm usnv usny usoh usok usor uspa usri ussc~d ustn ustx usut usva usvt uswa uswi uswv uswy + uyar uyca uycl uyco uydu uyfd uyfs uyla uyma uymo uypa uyrn~o uyrv uysa uysj uyso uyta uytt + uzan uzbu uzfa uzji uzng uznw uzqa uzqr uzsa uzsi uzsu uztk uzto uzxo + vc01~6 + vea~p ver~z + vn01~7 vn09 vn13~4 vn18 vn20~9 vn30~7 vn39 vn40~1 vn43~7 vn49 vn50~9 vn61 vn63 vn66~9 vn70~3 vnct vndn vnhn vnhp vnsg + vumap vupam vusam vusee vutae vutob + wfal wfsg wfuv + wsaa wsal wsat wsfa wsge wsgi wspa wssa wstu wsvf wsvs + yeab yead yeam yeba yeda yedh yehd yehj yehu yeib yeja yela yema yemr yemw yera yesa yesd yesh yesn yesu yeta + zaec zafs zagp zakzn zalp zamp zanc zanw zawc + zm01~9 zm10 + zwbu zwha zwma zwmc zwme zwmi zwmn zwms zwmv~w + + + + albr albu aldi aldl aldr aldv alel aler alfr algj algr alha alka~c alko alkr alku allb alle allu almk almm almr almt alpg alpq~r alpu alsh alsk alsr alte altp altr alvl + ba01~9 ba10 bh16 + cdbn cdka cdkw cdor ci01~9 ci10~9 cn11~5 cn21~3 cn31~7 cn41~6 cn50~4 cn61~5 cn71 cn91~2 cz101~9 cz10a~f cz110~9 cz120~2 cz611~5 cz621~7 czjc czjm czka czkr czli czmo czol czpa czpl czpr czst czus czvy czzl + ee44 ee49 ee51 ee57 ee59 ee65 ee67 ee70 ee78 ee82 ee86 + fi01 fr75 fra~b frbl frc frcor frcp frd~g frgf frgp frgua frh~l frlre frm frmay frmf frmq frn frnc fro~p frpf frpm frq~r frre frs~t frtf fru~v frwf fryt + gbant gbard gbarm gbbla gbbly gbbmh gbbnb gbcgv gbckf gbckt gbclr gbcsr gbdgn gbdow gbdry gbeaw gbfer gbgbn gblmv gblrn gblsb gbmft gbmyl gbndn gbnta gbnym gbomh gbpol gbstb gbukm ghba glqa gr01 gr03~7 gr11~7 gr21~4 gr31~4 gr41~4 gr51~9 gr61~4 gr71~3 gr81~5 gr91~4 gra1 gtav gtbv gtcm gtcq gtes gtgu gthu gtiz gtja gtju gtpe gtpr gtqc gtqz gtre gtsa gtsm gtso gtsr gtsu gtto gtza + indd indn ir31~2 is0 isbfj isdju isfld issey itao itci itog itot itsd itvs + kzbay + laxn lud lug lul lv001 lv003~6 lv008~9 lv010 lv012~4 lv017~9 lv020~1 lv023~5 lv027~9 lv030~2 lv034~9 lv040 lv043~6 lv048~9 lv051 lv053 lv055 lv057 lv060~1 lv063~6 lv069 lv070~2 lv074~6 lv078~9 lv081~6 lv090 lv092~3 lv095~6 lv098 lv100 lv103~5 lv107~9 lv110 lvjkb lvvmr + ma13~6 mammd mammn masyb mk01~9 mk10~9 mk20~9 mk30~9 mk40~9 mk50~9 mk60~9 mk70~9 mk80~5 mrnkc mubr mucu mupu muqb muvp mvce mvnc mvno mvsc mvsu mvun mvus mxdif + nlaw nlcw nlsx no01~2 no04~9 no10 no12 no14 no16~7 no19 no20 no23 nzn nzs + omba omsh + pkta plds plkp pllb plld pllu plma plmz plop plpd plpk plpm plsk~l plwn plwp plzp + shta sts + tteto ttrcm ttwto twkhq twtnq twtpq twtxq + usas usgu usmp uspr usum usvi + zagt zanl + + + + aczzzz adzzzz aezzzz afzzzz agzzzz aizzzz alzzzz amzzzz aozzzz aqzzzz arzzzz aszzzz atzzzz auzzzz awzzzz axzzzz azzzzz + bazzzz bbzzzz bdzzzz bezzzz bfzzzz bgzzzz bhzzzz bizzzz bjzzzz blzzzz bmzzzz bnzzzz bozzzz bqzzzz brzzzz bszzzz btzzzz bvzzzz bwzzzz byzzzz bzzzzz + cazzzz cczzzz cdzzzz cfzzzz cgzzzz chzzzz cizzzz ckzzzz clzzzz cmzzzz cnzzzz cozzzz cpzzzz cqzzzz crzzzz cuzzzz cvzzzz cwzzzz cxzzzz cyzzzz czzzzz + dezzzz dgzzzz djzzzz dkzzzz dmzzzz dozzzz dzzzzz + eazzzz eczzzz eezzzz egzzzz ehzzzz erzzzz eszzzz etzzzz + fizzzz fjzzzz fkzzzz fmzzzz fozzzz frzzzz + gazzzz gbzzzz gdzzzz gezzzz gfzzzz ggzzzz ghzzzz gizzzz glzzzz gmzzzz gnzzzz gpzzzz gqzzzz grzzzz gszzzz gtzzzz guzzzz gwzzzz gyzzzz + hkzzzz hmzzzz hnzzzz hrzzzz htzzzz huzzzz + iczzzz idzzzz iezzzz ilzzzz imzzzz inzzzz iozzzz iqzzzz irzzzz iszzzz itzzzz + jezzzz jmzzzz jozzzz jpzzzz + kezzzz kgzzzz khzzzz kizzzz kmzzzz knzzzz kpzzzz krzzzz kwzzzz kyzzzz kzzzzz + lazzzz lbzzzz lczzzz lizzzz lkzzzz lrzzzz lszzzz ltzzzz luzzzz lvzzzz lyzzzz + mazzzz mczzzz mdzzzz mezzzz mfzzzz mgzzzz mhzzzz mkzzzz mlzzzz mmzzzz mnzzzz mozzzz mpzzzz mqzzzz mrzzzz mszzzz mtzzzz muzzzz mvzzzz mwzzzz mxzzzz myzzzz mzzzzz + nazzzz nczzzz nezzzz nfzzzz ngzzzz nizzzz nlzzzz nozzzz npzzzz nrzzzz nuzzzz nzzzzz + omzzzz + pazzzz pezzzz pfzzzz pgzzzz phzzzz pkzzzz plzzzz pmzzzz pnzzzz przzzz pszzzz ptzzzz pwzzzz pyzzzz + qazzzz + rezzzz rozzzz rszzzz ruzzzz rwzzzz + sazzzz sbzzzz sczzzz sdzzzz sezzzz sgzzzz shzzzz sizzzz sjzzzz skzzzz slzzzz smzzzz snzzzz sozzzz srzzzz sszzzz stzzzz svzzzz sxzzzz syzzzz szzzzz + tazzzz tczzzz tdzzzz tfzzzz tgzzzz thzzzz tjzzzz tkzzzz tlzzzz tmzzzz tnzzzz tozzzz trzzzz ttzzzz tvzzzz twzzzz tzzzzz + uazzzz ugzzzz umzzzz uszzzz uyzzzz uzzzzz + vazzzz vczzzz vezzzz vgzzzz vizzzz vnzzzz vuzzzz + wfzzzz wszzzz + xkzzzz + yezzzz ytzzzz + zazzzz zmzzzz zwzzzz + + + diff --git a/Assets/Resources/cldr/common/validity/subdivision.xml.meta b/Assets/Resources/cldr/common/validity/subdivision.xml.meta new file mode 100644 index 0000000..ba44f4b --- /dev/null +++ b/Assets/Resources/cldr/common/validity/subdivision.xml.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: ba6482cecb2178b4aa803ff753309657 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/cldr/common/validity/unit.xml b/Assets/Resources/cldr/common/validity/unit.xml new file mode 100644 index 0000000..02b886c --- /dev/null +++ b/Assets/Resources/cldr/common/validity/unit.xml @@ -0,0 +1,257 @@ + + + + + + + + acceleration-g-force + acceleration-meter-per-square-second + angle-revolution + angle-radian + angle-degree + angle-arc-minute + angle-arc-second + area-square-kilometer + area-hectare + area-square-meter + area-square-centimeter + area-square-mile + area-acre + area-square-yard + area-square-foot + area-square-inch + area-dunam + concentr-karat + concentr-milligram-ofglucose-per-deciliter + concentr-millimole-per-liter + concentr-item + concentr-permillion + concentr-percent + concentr-permille + concentr-permyriad + concentr-mole + consumption-liter-per-kilometer + consumption-liter-per-100-kilometer + consumption-mile-per-gallon + consumption-mile-per-gallon-imperial + digital-petabyte + digital-terabyte + digital-terabit + digital-gigabyte + digital-gigabit + digital-megabyte + digital-megabit + digital-kilobyte + digital-kilobit + digital-byte + digital-bit + duration-century + duration-decade + duration-year + duration-year-person + duration-quarter + duration-month + duration-month-person + duration-week + duration-week-person + duration-day + duration-day-person + duration-hour + duration-minute + duration-second + duration-millisecond + duration-microsecond + duration-nanosecond + electric-ampere + electric-milliampere + electric-ohm + electric-volt + energy-kilocalorie + energy-calorie + energy-foodcalorie + energy-kilojoule + energy-joule + energy-kilowatt-hour + energy-electronvolt + energy-british-thermal-unit + energy-therm-us + force-pound-force + force-newton + force-kilowatt-hour-per-100-kilometer + frequency-gigahertz + frequency-megahertz + frequency-kilohertz + frequency-hertz + graphics-em + graphics-pixel + graphics-megapixel + graphics-pixel-per-centimeter + graphics-pixel-per-inch + graphics-dot-per-centimeter + graphics-dot-per-inch + graphics-dot + length-earth-radius + length-kilometer + length-meter + length-decimeter + length-centimeter + length-millimeter + length-micrometer + length-nanometer + length-picometer + length-mile + length-yard + length-foot + length-inch + length-parsec + length-light-year + length-astronomical-unit + length-furlong + length-fathom + length-nautical-mile + length-mile-scandinavian + length-point + length-solar-radius + light-lux + light-candela + light-lumen + light-solar-luminosity + mass-tonne + mass-kilogram + mass-gram + mass-milligram + mass-microgram + mass-ton + mass-stone + mass-pound + mass-ounce + mass-ounce-troy + mass-carat + mass-dalton + mass-earth-mass + mass-solar-mass + mass-grain + power-gigawatt + power-megawatt + power-kilowatt + power-watt + power-milliwatt + power-horsepower + pressure-millimeter-ofhg + pressure-pound-force-per-square-inch + pressure-inch-ofhg + pressure-bar + pressure-millibar + pressure-atmosphere + pressure-pascal + pressure-hectopascal + pressure-kilopascal + pressure-megapascal + speed-kilometer-per-hour + speed-meter-per-second + speed-mile-per-hour + speed-knot + temperature-generic + temperature-celsius + temperature-fahrenheit + temperature-kelvin + torque-pound-force-foot + torque-newton-meter + volume-cubic-kilometer + volume-cubic-meter + volume-cubic-centimeter + volume-cubic-mile + volume-cubic-yard + volume-cubic-foot + volume-cubic-inch + volume-megaliter + volume-hectoliter + volume-liter + volume-deciliter + volume-centiliter + volume-milliliter + volume-pint-metric + volume-cup-metric + volume-acre-foot + volume-bushel + volume-gallon + volume-gallon-imperial + volume-quart + volume-pint + volume-cup + volume-fluid-ounce + volume-fluid-ounce-imperial + volume-tablespoon + volume-teaspoon + volume-barrel + volume-dessert-spoon + volume-dessert-spoon-imperial + volume-drop + volume-dram + volume-jigger + volume-pinch + volume-quart-imperial + angle-steradian + concentr-portion + concentr-ofglucose + concentr-katal + duration-fortnight + electric-coulomb + electric-farad + electric-henry + electric-siemens + energy-calorie-it + energy-british-thermal-unit-it + energy-becquerel + energy-sievert + energy-gray + force-kilogram-force + length-100-kilometer + length-rod + length-chain + magnetic-tesla + magnetic-weber + mass-slug + pressure-ofhg + speed-beaufort + temperature-rankine + volume-pint-imperial + pressure-gasoline-energy-density + length-rin + length-sun + length-shaku-length + length-shaku-cloth + length-ken + length-jo-jp + length-ri-jp + area-bu-jp + area-se-jp + area-cho + volume-kosaji + volume-osaji + volume-cup-jp + volume-shaku + volume-sai + volume-to-jp + volume-koku + mass-fun + + + acceleration-meter-per-second-squared + consumption-liter-per-100kilometers + concentr-part-per-million + pressure-inch-hg + pressure-pound-per-square-inch + pressure-millimeter-of-mercury + proportion-karat + torque-pound-foot + concentr-milligram-per-deciliter + mass-metric-ton + + + diff --git a/Assets/Resources/cldr/common/validity/unit.xml.meta b/Assets/Resources/cldr/common/validity/unit.xml.meta new file mode 100644 index 0000000..df310d1 --- /dev/null +++ b/Assets/Resources/cldr/common/validity/unit.xml.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: f1766e0971bde2a4185cb4098e6625e7 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/cldr/common/validity/variant.xml b/Assets/Resources/cldr/common/validity/variant.xml new file mode 100644 index 0000000..e5778fa --- /dev/null +++ b/Assets/Resources/cldr/common/validity/variant.xml @@ -0,0 +1,46 @@ + + + + + + + + 1606nict 1694acad 1901 1959acad 1994 1996 + abl1943 akuapem alalc97 aluku ao1990 aranes arkaika asante auvern + baku1926 balanka barla basiceng bauddha biscayan biske bohoric boont bornholm + cisaup colb1945 cornu creiss + dajnko + ekavsk emodeng + fonipa fonkirsh fonnapa fonupa fonxsamp + gallo gascon grclass grital grmistr + hepburn hognorsk hsistemo + ijekavsk itihasa ivanchov + jauer jyutping + kkcor kociewie kscor + laukika lemosin lengadoc lipaw ltg1929 ltg2007 luna1918 + metelko monoton + ndyuka nedis newfound nicard njiva nulik + osojs oxendict + pahawh2~4 pamaka peano petr1708 pinyin polyton provenc puter + rigik rozaj rumgr + scotland scouse simple solba sotav spanglis surmiran sursilv sutsilv synnejyl + tarask tongyong tunumiit + uccor ucrcor ulster unifon + vaidika valencia vallader vecdruka vivaraup + wadegile + xsistemo + + + arevela arevmda + heploc + + + diff --git a/Assets/Resources/cldr/common/validity/variant.xml.meta b/Assets/Resources/cldr/common/validity/variant.xml.meta new file mode 100644 index 0000000..9fb4219 --- /dev/null +++ b/Assets/Resources/cldr/common/validity/variant.xml.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 6f3cee42acc87df4299ae843d1d6b75b +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Shaders.meta b/Assets/Shaders.meta new file mode 100644 index 0000000..fc1f10e --- /dev/null +++ b/Assets/Shaders.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6395d689f0d3cc441a6f4958df0b08bb +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Shaders/Mask.shader b/Assets/Shaders/Mask.shader new file mode 100644 index 0000000..3b46bd5 --- /dev/null +++ b/Assets/Shaders/Mask.shader @@ -0,0 +1,24 @@ +Shader "Map/Mask" +{ + Properties { + [IntRange] _Mask ("Mask", Range(0, 255)) = 0 + } + SubShader { + Tags { + "RenderType" = "Opaque" + "Queue" = "Geometry-1" + } + + Pass { + Blend Zero One + ZWrite Off + + Stencil { + Ref 255 + WriteMask [_Mask] + Comp Always + Pass Replace + } + } + } +} diff --git a/Assets/Shaders/Mask.shader.meta b/Assets/Shaders/Mask.shader.meta new file mode 100644 index 0000000..d946efc --- /dev/null +++ b/Assets/Shaders/Mask.shader.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 3f93297dafa09bc488f631b61576f15d +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + preprocessorOverride: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Shaders/Masked.shader b/Assets/Shaders/Masked.shader new file mode 100644 index 0000000..7ab9fc9 --- /dev/null +++ b/Assets/Shaders/Masked.shader @@ -0,0 +1,55 @@ +Shader "Map/Masked" { + Properties { + _Color ("Color", Color) = (1, 1, 1, 1) + _MainTex ("Texture", 2D) = "white" { } + [IntRange] _Mask ("Mask", Range(0, 255)) = 0 + } + SubShader { + Tags { "RenderType" = "Opaque" } + LOD 100 + + Blend SrcAlpha OneMinusSrcAlpha + + Pass { + Stencil { + Ref 0 + ReadMask [_Mask] + Comp Equal + } + + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + + #include "UnityCG.cginc" + + struct appdata { + float4 vertex : POSITION; + float2 uv : TEXCOORD0; + }; + + struct v2f { + float2 uv : TEXCOORD0; + float4 vertex : SV_POSITION; + }; + + sampler2D _MainTex; + float4 _MainTex_ST; + fixed4 _Color; + + v2f vert (appdata v) { + v2f o; + o.vertex = UnityObjectToClipPos(v.vertex); + o.uv = TRANSFORM_TEX(v.uv, _MainTex); + return o; + } + + fixed4 frag (v2f i) : SV_Target { + fixed4 col = tex2D(_MainTex, i.uv) * _Color; + clip(col.a - 0.5); + return col; + } + ENDCG + } + } +} diff --git a/Assets/Shaders/Masked.shader.meta b/Assets/Shaders/Masked.shader.meta new file mode 100644 index 0000000..bed46e9 --- /dev/null +++ b/Assets/Shaders/Masked.shader.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 9a288241ef8ea614dba716a82997ae1a +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + preprocessorOverride: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Sprites.meta b/Assets/Sprites.meta new file mode 100644 index 0000000..bf48004 --- /dev/null +++ b/Assets/Sprites.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2d11e191723bc7f49afca99e2b87f492 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Sprites/MapElements.meta b/Assets/Sprites/MapElements.meta new file mode 100644 index 0000000..334690b --- /dev/null +++ b/Assets/Sprites/MapElements.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ca54f6ff221c11449bc446f2c3f6b93b +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Sprites/MapElements/hypocenter.png b/Assets/Sprites/MapElements/hypocenter.png new file mode 100644 index 0000000..832886f Binary files /dev/null and b/Assets/Sprites/MapElements/hypocenter.png differ diff --git a/Assets/Sprites/MapElements/hypocenter.png.meta b/Assets/Sprites/MapElements/hypocenter.png.meta new file mode 100644 index 0000000..ea23e4a --- /dev/null +++ b/Assets/Sprites/MapElements/hypocenter.png.meta @@ -0,0 +1,135 @@ +fileFormatVersion: 2 +guid: d22b834b192bdda4aa4c5b162f0c37d3 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + 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 + vTOnly: 0 + ignoreMasterTextureLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 0 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 0 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 1 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 1 + 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: [] + nameFileIdTable: {} + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Sprites/MapElements/hypocenter_low_quality.png b/Assets/Sprites/MapElements/hypocenter_low_quality.png new file mode 100644 index 0000000..be76158 Binary files /dev/null and b/Assets/Sprites/MapElements/hypocenter_low_quality.png differ diff --git a/Assets/Sprites/MapElements/hypocenter_low_quality.png.meta b/Assets/Sprites/MapElements/hypocenter_low_quality.png.meta new file mode 100644 index 0000000..8696f6b --- /dev/null +++ b/Assets/Sprites/MapElements/hypocenter_low_quality.png.meta @@ -0,0 +1,135 @@ +fileFormatVersion: 2 +guid: 967ac627d7dbb8f4299eaeb70a8022e3 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + 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 + vTOnly: 0 + ignoreMasterTextureLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 0 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 0 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 1 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 1 + 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: [] + nameFileIdTable: {} + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Sprites/MapElements/label_area.png b/Assets/Sprites/MapElements/label_area.png new file mode 100644 index 0000000..94f29c5 Binary files /dev/null and b/Assets/Sprites/MapElements/label_area.png differ diff --git a/Assets/Sprites/MapElements/label_area.png.meta b/Assets/Sprites/MapElements/label_area.png.meta new file mode 100644 index 0000000..5bed3e6 --- /dev/null +++ b/Assets/Sprites/MapElements/label_area.png.meta @@ -0,0 +1,135 @@ +fileFormatVersion: 2 +guid: ff05af16f0aa0464fb8ce6255a8bcbde +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + 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 + vTOnly: 0 + ignoreMasterTextureLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 0 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 0 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 1 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 1 + 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: [] + nameFileIdTable: {} + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Sprites/MapElements/label_point.png b/Assets/Sprites/MapElements/label_point.png new file mode 100644 index 0000000..1e07d01 Binary files /dev/null and b/Assets/Sprites/MapElements/label_point.png differ diff --git a/Assets/Sprites/MapElements/label_point.png.meta b/Assets/Sprites/MapElements/label_point.png.meta new file mode 100644 index 0000000..e92dffb --- /dev/null +++ b/Assets/Sprites/MapElements/label_point.png.meta @@ -0,0 +1,135 @@ +fileFormatVersion: 2 +guid: 6fd7ea081adb0004a989c2e841e4cf34 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + 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 + vTOnly: 0 + ignoreMasterTextureLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 0 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 0 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 1 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 1 + 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: [] + nameFileIdTable: {} + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Sprites/MapElements/line_dash_3_1.png b/Assets/Sprites/MapElements/line_dash_3_1.png new file mode 100644 index 0000000..d20f8c1 Binary files /dev/null and b/Assets/Sprites/MapElements/line_dash_3_1.png differ diff --git a/Assets/Sprites/MapElements/line_dash_3_1.png.meta b/Assets/Sprites/MapElements/line_dash_3_1.png.meta new file mode 100644 index 0000000..fb29a67 --- /dev/null +++ b/Assets/Sprites/MapElements/line_dash_3_1.png.meta @@ -0,0 +1,135 @@ +fileFormatVersion: 2 +guid: 6b05e97e5fa3de54b850e0fe13f6dcee +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + 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 + vTOnly: 0 + ignoreMasterTextureLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + 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: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 1 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + 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: [] + nameFileIdTable: {} + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Sprites/MapElements/point.png b/Assets/Sprites/MapElements/point.png new file mode 100644 index 0000000..8b50818 Binary files /dev/null and b/Assets/Sprites/MapElements/point.png differ diff --git a/Assets/Sprites/MapElements/point.png.meta b/Assets/Sprites/MapElements/point.png.meta new file mode 100644 index 0000000..a52f8b1 --- /dev/null +++ b/Assets/Sprites/MapElements/point.png.meta @@ -0,0 +1,135 @@ +fileFormatVersion: 2 +guid: 9073ff3c2a4d9a34b8ad0e21c02b50df +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + 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 + vTOnly: 0 + ignoreMasterTextureLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 0 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 0 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 1 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + 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: [] + nameFileIdTable: {} + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Sprites/MapElements/tsunami_bar.png b/Assets/Sprites/MapElements/tsunami_bar.png new file mode 100644 index 0000000..53f87cd Binary files /dev/null and b/Assets/Sprites/MapElements/tsunami_bar.png differ diff --git a/Assets/Sprites/MapElements/tsunami_bar.png.meta b/Assets/Sprites/MapElements/tsunami_bar.png.meta new file mode 100644 index 0000000..01db485 --- /dev/null +++ b/Assets/Sprites/MapElements/tsunami_bar.png.meta @@ -0,0 +1,135 @@ +fileFormatVersion: 2 +guid: 0194dab6ea5df9e43b1daaf750815c4e +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + 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 + vTOnly: 0 + ignoreMasterTextureLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 0 + alignment: 7 + spritePivot: {x: 0.5, y: 0} + spritePixelsToUnits: 100 + spriteBorder: {x: 31, y: 31, z: 31, w: 31} + spriteGenerateFallbackPhysicsShape: 0 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 1 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + 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: 1537655665 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Sprites/MapElements/tsunami_bar_cap.png b/Assets/Sprites/MapElements/tsunami_bar_cap.png new file mode 100644 index 0000000..b1c40bc Binary files /dev/null and b/Assets/Sprites/MapElements/tsunami_bar_cap.png differ diff --git a/Assets/Sprites/MapElements/tsunami_bar_cap.png.meta b/Assets/Sprites/MapElements/tsunami_bar_cap.png.meta new file mode 100644 index 0000000..05f1a32 --- /dev/null +++ b/Assets/Sprites/MapElements/tsunami_bar_cap.png.meta @@ -0,0 +1,135 @@ +fileFormatVersion: 2 +guid: 46ef28d7c012baf41afa40c15a9631da +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + 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 + vTOnly: 0 + ignoreMasterTextureLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 0 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 0 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 1 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + 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: [] + nameFileIdTable: {} + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Sprites/MapElements/tsunami_bar_rising.png b/Assets/Sprites/MapElements/tsunami_bar_rising.png new file mode 100644 index 0000000..2804b85 Binary files /dev/null and b/Assets/Sprites/MapElements/tsunami_bar_rising.png differ diff --git a/Assets/Sprites/MapElements/tsunami_bar_rising.png.meta b/Assets/Sprites/MapElements/tsunami_bar_rising.png.meta new file mode 100644 index 0000000..3a74819 --- /dev/null +++ b/Assets/Sprites/MapElements/tsunami_bar_rising.png.meta @@ -0,0 +1,135 @@ +fileFormatVersion: 2 +guid: dbcbff0efe9cbc64a99c43795615a2f2 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + 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 + vTOnly: 0 + ignoreMasterTextureLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 0 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 0 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 1 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + 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: [] + nameFileIdTable: {} + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Sprites/UI.meta b/Assets/Sprites/UI.meta new file mode 100644 index 0000000..e593ac6 --- /dev/null +++ b/Assets/Sprites/UI.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 014396f5f3be3c8429ccb9b26e79310f +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Sprites/UI/ui_border.png b/Assets/Sprites/UI/ui_border.png new file mode 100644 index 0000000..340ed19 Binary files /dev/null and b/Assets/Sprites/UI/ui_border.png differ diff --git a/Assets/Sprites/UI/ui_border.png.meta b/Assets/Sprites/UI/ui_border.png.meta new file mode 100644 index 0000000..73811b9 --- /dev/null +++ b/Assets/Sprites/UI/ui_border.png.meta @@ -0,0 +1,135 @@ +fileFormatVersion: 2 +guid: caade3ded4573b540a946c53bd789b37 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + 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 + vTOnly: 0 + ignoreMasterTextureLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 0 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 12, y: 12, z: 12, w: 12} + spriteGenerateFallbackPhysicsShape: 0 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 1 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + 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: 1537655665 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Sprites/UI/ui_border_lower.png b/Assets/Sprites/UI/ui_border_lower.png new file mode 100644 index 0000000..a60efa0 Binary files /dev/null and b/Assets/Sprites/UI/ui_border_lower.png differ diff --git a/Assets/Sprites/UI/ui_border_lower.png.meta b/Assets/Sprites/UI/ui_border_lower.png.meta new file mode 100644 index 0000000..a8a0f73 --- /dev/null +++ b/Assets/Sprites/UI/ui_border_lower.png.meta @@ -0,0 +1,135 @@ +fileFormatVersion: 2 +guid: f6ffd2153d294b246b3a2bf1fdbba009 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + 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 + vTOnly: 0 + ignoreMasterTextureLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 0 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 12, y: 12, z: 12, w: 0} + spriteGenerateFallbackPhysicsShape: 0 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 1 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + 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: 1537655665 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Sprites/UI/ui_border_mask.png b/Assets/Sprites/UI/ui_border_mask.png new file mode 100644 index 0000000..bd417ef Binary files /dev/null and b/Assets/Sprites/UI/ui_border_mask.png differ diff --git a/Assets/Sprites/UI/ui_border_mask.png.meta b/Assets/Sprites/UI/ui_border_mask.png.meta new file mode 100644 index 0000000..0f48b3b --- /dev/null +++ b/Assets/Sprites/UI/ui_border_mask.png.meta @@ -0,0 +1,135 @@ +fileFormatVersion: 2 +guid: 5867898c2e0a7f14c8a8e96f2856e8f0 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + 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 + vTOnly: 0 + ignoreMasterTextureLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 0 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 12, y: 12, z: 12, w: 12} + spriteGenerateFallbackPhysicsShape: 0 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 1 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + 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: 1537655665 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Sprites/UI/ui_sub_border.png b/Assets/Sprites/UI/ui_sub_border.png new file mode 100644 index 0000000..e5f2ff0 Binary files /dev/null and b/Assets/Sprites/UI/ui_sub_border.png differ diff --git a/Assets/Sprites/UI/ui_sub_border.png.meta b/Assets/Sprites/UI/ui_sub_border.png.meta new file mode 100644 index 0000000..405a329 --- /dev/null +++ b/Assets/Sprites/UI/ui_sub_border.png.meta @@ -0,0 +1,135 @@ +fileFormatVersion: 2 +guid: 5c322b9ff21616647910d5f11355d1fc +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + 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 + vTOnly: 0 + ignoreMasterTextureLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 0 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 4, y: 4, z: 4, w: 4} + spriteGenerateFallbackPhysicsShape: 0 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 1 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + 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: 1537655665 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets.meta b/Assets/StreamingAssets.meta new file mode 100644 index 0000000..1ae29d7 --- /dev/null +++ b/Assets/StreamingAssets.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2aae3f5ddebbeb04fa8964dcd23622d5 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages.meta b/Assets/StreamingAssets/Messages.meta new file mode 100644 index 0000000..0ab742d --- /dev/null +++ b/Assets/StreamingAssets/Messages.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: bbe3e26d87dcd7c4db52f17a4404eb9f +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.CWA.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.CWA.meta new file mode 100644 index 0000000..1795ae3 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.CWA.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c113b906f91b32643bd81e5687ce8ddf +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.CWA/en.json b/Assets/StreamingAssets/Messages/Cryville.EEW.CWA/en.json new file mode 100644 index 0000000..15c14d5 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.CWA/en.json @@ -0,0 +1,9 @@ +{ + "Culture": "en-US", + "Strings": { + "IntensitySuffixLevel": "", + "IntensitySuffixLower": "-lower", + "IntensitySuffixUpper": "-upper", + "IntensityUnknown": "unknown" + } +} \ No newline at end of file diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.CWA/en.json.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.CWA/en.json.meta new file mode 100644 index 0000000..5ecb33c --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.CWA/en.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 847df274ec0b5904d8a272f8b8eebd46 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.CWA/und.json b/Assets/StreamingAssets/Messages/Cryville.EEW.CWA/und.json new file mode 100644 index 0000000..581c071 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.CWA/und.json @@ -0,0 +1,9 @@ +{ + "Culture": "zh-TW", + "Strings": { + "IntensitySuffixLevel": "ç´š", + "IntensitySuffixLower": "å¼±", + "IntensitySuffixUpper": "å¼·", + "IntensityUnknown": "䏿˜Ž" + } +} \ No newline at end of file diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.CWA/und.json.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.CWA/und.json.meta new file mode 100644 index 0000000..338c66c --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.CWA/und.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: ab922cc974eea974395d84e69ad65200 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.CWA/yue.json b/Assets/StreamingAssets/Messages/Cryville.EEW.CWA/yue.json new file mode 100644 index 0000000..523e8e6 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.CWA/yue.json @@ -0,0 +1,9 @@ +{ + "Culture": "yue-HK", + "Strings": { + "IntensitySuffixLevel": "ç´š", + "IntensitySuffixLower": "å¼±", + "IntensitySuffixUpper": "å¼·", + "IntensityUnknown": "䏿˜Ž" + } +} \ No newline at end of file diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.CWA/yue.json.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.CWA/yue.json.meta new file mode 100644 index 0000000..9b0d884 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.CWA/yue.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 573f779b6ff13f84ba5dd76437f6a34c +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.CWA/zh-Hans.json b/Assets/StreamingAssets/Messages/Cryville.EEW.CWA/zh-Hans.json new file mode 100644 index 0000000..6cf02d1 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.CWA/zh-Hans.json @@ -0,0 +1,9 @@ +{ + "Culture": "zh-CN", + "Strings": { + "IntensitySuffixLevel": "级", + "IntensitySuffixLower": "å¼±", + "IntensitySuffixUpper": "强", + "IntensityUnknown": "䏿˜Ž" + } +} \ No newline at end of file diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.CWA/zh-Hans.json.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.CWA/zh-Hans.json.meta new file mode 100644 index 0000000..e3c3a04 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.CWA/zh-Hans.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 15207ed5dc619ee49a91a68dee6396dd +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.CWAOpenData.TTS.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.CWAOpenData.TTS.meta new file mode 100644 index 0000000..cd53e80 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.CWAOpenData.TTS.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 479567b92d32fee4383058a74e25c36f +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.CWAOpenData.TTS/en.json b/Assets/StreamingAssets/Messages/Cryville.EEW.CWAOpenData.TTS/en.json new file mode 100644 index 0000000..24a88d0 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.CWAOpenData.TTS/en.json @@ -0,0 +1,39 @@ +{ + "Culture": "en-US", + "Strings": { + "EarthquakeBody": "At {0}, a magnitude {2:F1} earthquake occurred in {1}. Max intensity {3}.", + "EarthquakeFocalDepth": "Hypocenter depth {0} kilometers.", + "TsunamiForecast": "The following areas are estimated to have a tsunami height of {0}.", + "TsunamiForecastArea": "{0}. Estimated arrival time {1:HH:mm}.", + "TsunamiObservation": "Currently, the tsunami heights observed per area are as follows.", + "TsunamiObservationMaxHeight": "Currently, the maximum tsunami height observed is {0} meters.", + "TsunamiObservationStation": "{0}. {1} meters." + }, + "StringSets": { + "Title": { + "Strings": { + "地震報告": "Earthquake report", + "海嘯警報": "Tsunami warning", + "海嘯警報解除": "Tsunami warning lifted" + } + }, + "TsunamiForecastArea": { + "Strings": { + "北部沿海地å€": "Northern coastal area", + "æ±åŒ—沿海地å€": "North-eastern coastal area", + "æ±å—沿海地å€": "South-eastern coastal area", + "æ±éƒ¨æ²¿æµ·åœ°å€": "Eastern coastal area", + "海峽沿海地å€": "Strait coastal area", + "è¥¿å—æ²¿æµ·åœ°å€": "South-western coastal area" + } + }, + "TsunamiForecastWaveHeight": { + "Strings": { + "å°æ–¼1公尺": "less than 1 meter", + "1至3公尺": "1 to 3 meters", + "3至6公尺": "3 to 6 meters", + "大於6公尺": "greater than 6 meters" + } + } + } +} \ No newline at end of file diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.CWAOpenData.TTS/en.json.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.CWAOpenData.TTS/en.json.meta new file mode 100644 index 0000000..bf7d140 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.CWAOpenData.TTS/en.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 6276e14075a893d40922009bc5c33fb5 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.CWAOpenData.TTS/und.json b/Assets/StreamingAssets/Messages/Cryville.EEW.CWAOpenData.TTS/und.json new file mode 100644 index 0000000..250f1ae --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.CWAOpenData.TTS/und.json @@ -0,0 +1,11 @@ +{ + "Culture": "zh-TW", + "Strings": { + "EarthquakeFocalDepth": "éœ‡æºæ·±åº¦{0}公里。", + "TsunamiForecast": "以下地å€é ä¼°æ³¢é«˜{0}。", + "TsunamiForecastArea": "{0}。é ä¼°åˆ°é”時間{1:HH:mm}。", + "TsunamiObservation": "ç•¶å‰ï¼Œå„地觀測波高如下。", + "TsunamiObservationMaxHeight": "ç•¶å‰ï¼Œå„地觀測到的最大波高為{0}公尺。", + "TsunamiObservationStation": "{0}。{1}公尺。" + } +} \ No newline at end of file diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.CWAOpenData.TTS/und.json.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.CWAOpenData.TTS/und.json.meta new file mode 100644 index 0000000..3cd9fed --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.CWAOpenData.TTS/und.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 25ba02ea5cf7cca4b9fe97f9a5b72100 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.CWAOpenData.TTS/yue.json b/Assets/StreamingAssets/Messages/Cryville.EEW.CWAOpenData.TTS/yue.json new file mode 100644 index 0000000..11bf5b7 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.CWAOpenData.TTS/yue.json @@ -0,0 +1,39 @@ +{ + "Culture": "yue-HK", + "Strings": { + "EarthquakeBody": "{0},{1}ç™¼ç”Ÿè¦æ¨¡{2:F1}有感地震,最大震度{3}。", + "EarthquakeFocalDepth": "éœ‡æºæ·±åº¦{0}公里。", + "TsunamiForecast": "以下地å€é è¨ˆæµ·å˜¯é«˜åº¦{0}。", + "TsunamiForecastArea": "{0}。é è¨ˆåˆ°é”時間{1:HH:mm}。", + "TsunamiObservation": "ç•¶å‰ï¼Œå„地觀測到嘅海嘯高度如下。", + "TsunamiObservationMaxHeight": "ç•¶å‰ï¼Œå„地觀測到嘅最高海嘯高度為{0}米。", + "TsunamiObservationStation": "{0}。{1}米。" + }, + "StringSets": { + "Title": { + "Strings": { + "地震報告": "地震報告", + "海嘯警報": "海嘯警報", + "海嘯警報解除": "海嘯警報解除" + } + }, + "TsunamiForecastArea": { + "Strings": { + "北部沿海地å€": "北部沿海地å€", + "æ±åŒ—沿海地å€": "æ±åŒ—沿海地å€", + "æ±å—沿海地å€": "æ±å—沿海地å€", + "æ±éƒ¨æ²¿æµ·åœ°å€": "æ±éƒ¨æ²¿æµ·åœ°å€", + "海峽沿海地å€": "海峽沿海地å€", + "è¥¿å—æ²¿æµ·åœ°å€": "è¥¿å—æ²¿æµ·åœ°å€" + } + }, + "TsunamiForecastWaveHeight": { + "Strings": { + "å°æ–¼1公尺": "å°æ–¼1ç±³", + "1至3公尺": "1至3ç±³", + "3至6公尺": "3至6ç±³", + "大於6公尺": "大於6ç±³" + } + } + } +} \ No newline at end of file diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.CWAOpenData.TTS/yue.json.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.CWAOpenData.TTS/yue.json.meta new file mode 100644 index 0000000..dd987ea --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.CWAOpenData.TTS/yue.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 8a135332450626142bafda1ea846973c +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.CWAOpenData.TTS/zh-Hans.json b/Assets/StreamingAssets/Messages/Cryville.EEW.CWAOpenData.TTS/zh-Hans.json new file mode 100644 index 0000000..2d1ba11 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.CWAOpenData.TTS/zh-Hans.json @@ -0,0 +1,39 @@ +{ + "Culture": "zh-CN", + "Strings": { + "EarthquakeBody": "{0},{1}å‘生规模{2:F1}有感地震,最大震度{3}。", + "EarthquakeFocalDepth": "éœ‡æºæ·±åº¦{0}åƒç±³ã€‚", + "TsunamiForecast": "以下地区预计海啸高度{0}。", + "TsunamiForecastArea": "{0}。预计到达时间{1:HH:mm}。", + "TsunamiObservation": "当å‰ï¼Œå„地观测到的海啸高度如下。", + "TsunamiObservationMaxHeight": "当å‰ï¼Œå„地观测到的最大海啸高度为{0}米。", + "TsunamiObservationStation": "{0}。{1}米。" + }, + "StringSets": { + "Title": { + "Strings": { + "地震報告": "地震报告", + "海嘯警報": "海啸警报", + "海嘯警報解除": "海啸警报解除" + } + }, + "TsunamiForecastArea": { + "Strings": { + "北部沿海地å€": "北部沿海地区", + "æ±åŒ—沿海地å€": "东北沿海地区", + "æ±å—沿海地å€": "ä¸œå—æ²¿æµ·åœ°åŒº", + "æ±éƒ¨æ²¿æµ·åœ°å€": "东部沿海地区", + "海峽沿海地å€": "海峡沿海地区", + "è¥¿å—æ²¿æµ·åœ°å€": "è¥¿å—æ²¿æµ·åœ°åŒº" + } + }, + "TsunamiForecastWaveHeight": { + "Strings": { + "å°æ–¼1公尺": "å°äºŽ1ç±³", + "1至3公尺": "1至3ç±³", + "3至6公尺": "3至6ç±³", + "大於6公尺": "大于6ç±³" + } + } + } +} \ No newline at end of file diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.CWAOpenData.TTS/zh-Hans.json.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.CWAOpenData.TTS/zh-Hans.json.meta new file mode 100644 index 0000000..8a8e190 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.CWAOpenData.TTS/zh-Hans.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: a0eaeeaecc42f7e46835b1513bd828e2 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.CWAOpenData.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.CWAOpenData.meta new file mode 100644 index 0000000..67dc090 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.CWAOpenData.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0020094b3e57ba243ac0f94b43b249ea +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.CWAOpenData/en.json b/Assets/StreamingAssets/Messages/Cryville.EEW.CWAOpenData/en.json new file mode 100644 index 0000000..ff2920e --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.CWAOpenData/en.json @@ -0,0 +1,14 @@ +{ + "Culture": "en-US", + "Strings": { + "SourceName": "CWA ({0})" + }, + "StringSets": { + "EventTypes": { + "Strings": { + "Earthquake": "Earthquake", + "Tsunami": "Tsunami" + } + } + } +} \ No newline at end of file diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.CWAOpenData/en.json.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.CWAOpenData/en.json.meta new file mode 100644 index 0000000..8f30c82 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.CWAOpenData/en.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 378c8a7a38407ea419e1cd4a7bbb1802 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.CWAOpenData/und.json b/Assets/StreamingAssets/Messages/Cryville.EEW.CWAOpenData/und.json new file mode 100644 index 0000000..022a175 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.CWAOpenData/und.json @@ -0,0 +1,14 @@ +{ + "Culture": "zh-TW", + "Strings": { + "SourceName": "CWA({0})" + }, + "StringSets": { + "EventTypes": { + "Strings": { + "Earthquake": "地震", + "Tsunami": "海嘯" + } + } + } +} \ No newline at end of file diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.CWAOpenData/und.json.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.CWAOpenData/und.json.meta new file mode 100644 index 0000000..dacb427 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.CWAOpenData/und.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 4420453e8aa13d44393e0840d2e1dfae +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.CWAOpenData/yue.json b/Assets/StreamingAssets/Messages/Cryville.EEW.CWAOpenData/yue.json new file mode 100644 index 0000000..6379837 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.CWAOpenData/yue.json @@ -0,0 +1,14 @@ +{ + "Culture": "yue-HK", + "Strings": { + "SourceName": "CWA({0})" + }, + "StringSets": { + "EventTypes": { + "Strings": { + "Earthquake": "地震", + "Tsunami": "海嘯" + } + } + } +} \ No newline at end of file diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.CWAOpenData/yue.json.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.CWAOpenData/yue.json.meta new file mode 100644 index 0000000..111125a --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.CWAOpenData/yue.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: fc3c9e1082d42514fa2170585ed11ac1 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.CWAOpenData/zh-Hans.json b/Assets/StreamingAssets/Messages/Cryville.EEW.CWAOpenData/zh-Hans.json new file mode 100644 index 0000000..034f8f1 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.CWAOpenData/zh-Hans.json @@ -0,0 +1,14 @@ +{ + "Culture": "zh-CN", + "Strings": { + "SourceName": "CWA({0})" + }, + "StringSets": { + "EventTypes": { + "Strings": { + "Earthquake": "地震", + "Tsunami": "海啸" + } + } + } +} \ No newline at end of file diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.CWAOpenData/zh-Hans.json.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.CWAOpenData/zh-Hans.json.meta new file mode 100644 index 0000000..7003fee --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.CWAOpenData/zh-Hans.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: f550591184fc10a4fa71c07627d8cd06 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.Core.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.Core.meta new file mode 100644 index 0000000..af4dfde --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.Core.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: bd7218464bd7b914292402c91afc17b8 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.Core/ja.json b/Assets/StreamingAssets/Messages/Cryville.EEW.Core/ja.json new file mode 100644 index 0000000..8d58404 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.Core/ja.json @@ -0,0 +1,17 @@ +{ + "Culture": "ja-JP", + "Strings": { + "CoreError": "コアã§ã‚¨ãƒ©ãƒ¼", + "Repeat": "å…ˆã»ã©ã®{0}を改ã‚ã¦ãŠä¼ãˆã—ã¾ã™ã€‚", + "Serial": "#{0}", + "SerialCancel": "å–æ¶ˆ", + "SerialFinal": "#{0}終", + "TTSError": "éŸ³å£°åˆæˆã§ã‚¨ãƒ©ãƒ¼", + "UnknownLocation": "åœ°åŸŸä¸æ˜Ž", + "WorkerConnected": "{0} ã«æŽ¥ç¶šã—ã¾ã—ãŸ", + "WorkerDisconnected": "{0} ã®æŽ¥ç¶šãŒåˆ‡ã‚Œã¾ã—ãŸ", + "WorkerError": "{0} ã®æŽ¥ç¶šã§ã‚¨ãƒ©ãƒ¼", + "WorkerExited": "{0} ã®æŽ¥ç¶šãŒç•°å¸¸çµ‚了ã—ã¾ã—ãŸ", + "WorkerStopped": "{0} ã®æŽ¥ç¶šãŒçµ‚了ã—ã¾ã—ãŸ" + } +} \ No newline at end of file diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.Core/ja.json.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.Core/ja.json.meta new file mode 100644 index 0000000..15af28d --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.Core/ja.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: b12bcb1cdf33e444d8daea81accc2e3b +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.Core/und.json b/Assets/StreamingAssets/Messages/Cryville.EEW.Core/und.json new file mode 100644 index 0000000..fc6adea --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.Core/und.json @@ -0,0 +1,17 @@ +{ + "Culture": "en-US", + "Strings": { + "CoreError": "Error in core worker", + "Repeat": "Repeating the last {0}.", + "Serial": "#{0}", + "SerialCancel": "Cancel", + "SerialFinal": "#{0} (Fin.)", + "TTSError": "Error in TTS worker", + "UnknownLocation": "unknown location", + "WorkerConnected": "Connected to {0}", + "WorkerDisconnected": "Disconnected with {0}", + "WorkerError": "Error in connection with {0}", + "WorkerExited": "Connection with {0} exited abnormally", + "WorkerStopped": "Connection with {0} stopped" + } +} \ No newline at end of file diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.Core/und.json.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.Core/und.json.meta new file mode 100644 index 0000000..151c4e2 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.Core/und.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 5688b01c11bd0404aa7b2e62c9245325 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.Core/yue.json b/Assets/StreamingAssets/Messages/Cryville.EEW.Core/yue.json new file mode 100644 index 0000000..e8acab2 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.Core/yue.json @@ -0,0 +1,17 @@ +{ + "Culture": "yue-HK", + "Strings": { + "CoreError": "核心發生錯誤", + "Repeat": "釿–°æ’­å ±é ­å…ˆå˜…{0}。", + "Serial": "#{0}", + "SerialCancel": "å–æ¶ˆ", + "SerialFinal": "#{0}終", + "TTSError": "èªžéŸ³åˆæˆç™¼ç”ŸéŒ¯èª¤", + "UnknownLocation": "䏿˜Žä½ç½®", + "WorkerConnected": "已連接到 {0}", + "WorkerDisconnected": "åŒ {0} 斷開連接", + "WorkerError": "åŒ {0} 嘅連接發生錯誤", + "WorkerExited": "åŒ {0} 嘅連接異常退出", + "WorkerStopped": "åŒ {0} å˜…é€£æŽ¥çµæŸ" + } +} \ No newline at end of file diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.Core/yue.json.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.Core/yue.json.meta new file mode 100644 index 0000000..2d2eb03 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.Core/yue.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 68ff589f045821246a84b63af0ff582a +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.Core/zh-Hant.json b/Assets/StreamingAssets/Messages/Cryville.EEW.Core/zh-Hant.json new file mode 100644 index 0000000..b815358 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.Core/zh-Hant.json @@ -0,0 +1,17 @@ +{ + "Culture": "zh-TW", + "Strings": { + "CoreError": "核心發生錯誤", + "Repeat": "釿–°æ’­å ±å‰›æ‰çš„{0}。", + "Serial": "#{0}", + "SerialCancel": "å–æ¶ˆ", + "SerialFinal": "#{0}終", + "TTSError": "èªžéŸ³åˆæˆç™¼ç”ŸéŒ¯èª¤", + "UnknownLocation": "䏿˜Žä½ç½®", + "WorkerConnected": "已連接到 {0}", + "WorkerDisconnected": "與 {0} 斷開連接", + "WorkerError": "與 {0} 的連接發生錯誤", + "WorkerExited": "與 {0} 的連接異常退出", + "WorkerStopped": "與 {0} çš„é€£æŽ¥çµæŸ" + } +} \ No newline at end of file diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.Core/zh-Hant.json.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.Core/zh-Hant.json.meta new file mode 100644 index 0000000..b963ba3 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.Core/zh-Hant.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 12383de3efb31ce498e3aeab593563b9 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.Core/zh.json b/Assets/StreamingAssets/Messages/Cryville.EEW.Core/zh.json new file mode 100644 index 0000000..b8dd6e8 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.Core/zh.json @@ -0,0 +1,17 @@ +{ + "Culture": "zh-CN", + "Strings": { + "CoreError": "核心å‘生错误", + "Repeat": "釿–°æ’­æŠ¥åˆšæ‰çš„{0}。", + "Serial": "#{0}", + "SerialCancel": "å–æ¶ˆ", + "SerialFinal": "#{0}终", + "TTSError": "è¯­éŸ³åˆæˆå‘生错误", + "UnknownLocation": "䏿˜Žä½ç½®", + "WorkerConnected": "已连接到 {0}", + "WorkerDisconnected": "与 {0} 断开连接", + "WorkerError": "与 {0} 的连接å‘生错误", + "WorkerExited": "与 {0} 的连接异常退出", + "WorkerStopped": "与 {0} 的连接结æŸ" + } +} \ No newline at end of file diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.Core/zh.json.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.Core/zh.json.meta new file mode 100644 index 0000000..b49f0d8 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.Core/zh.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 01811314e776b194786b9e3ff2a243b9 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.FERegion.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.FERegion.meta new file mode 100644 index 0000000..e4bdb34 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.FERegion.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7b7c22944ac1ffb488d89f318089c8c3 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.FERegion/ja.json b/Assets/StreamingAssets/Messages/Cryville.EEW.FERegion/ja.json new file mode 100644 index 0000000..fc5597a --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.FERegion/ja.json @@ -0,0 +1,781 @@ +{ + "Culture": "ja-JP", + "Strings": { + "1": "アラスカ州中央部", + "10": "ユーニマク島", + "100": "ベãƒã‚ºã‚¨ãƒ©ã€ãƒžãƒ©ã‚«ã‚¤ãƒœæ¹–", + "101": "ベãƒã‚ºã‚¨ãƒ©", + "102": "コロンビア西岸", + "103": "コロンビア", + "104": "エクアドル沖", + "105": "エクアドル沿岸", + "106": "コロンビアï¼ã‚¨ã‚¯ã‚¢ãƒ‰ãƒ«å›½å¢ƒ", + "107": "エクアドル", + "108": "ペルー北部沖", + "109": "ペルー北部沿岸", + "11": "ブリストル湾", + "110": "ペルーï¼ã‚¨ã‚¯ã‚¢ãƒ‰ãƒ«å›½å¢ƒ", + "111": "ペルー北部", + "112": "ペルーï¼ãƒ–ラジル国境", + "113": "ブラジルã€ã‚¢ãƒžã‚¾ãƒŠã‚¹å·ž", + "114": "ペルー沖", + "115": "ペルー沿岸", + "116": "ペルー中部", + "117": "ペルーå—部", + "118": "ペルーï¼ãƒœãƒªãƒ“ア国境", + "119": "ボリビア北部", + "12": "アラスカåŠå³¶", + "120": "ボリビア中部", + "121": "ãƒãƒªåŒ—部沖", + "122": "ãƒãƒªåŒ—部沿岸", + "123": "ãƒãƒªåŒ—部", + "124": "ãƒãƒªï¼ãƒœãƒªãƒ“ア国境", + "125": "ボリビアå—部", + "126": "パラグアイ", + "127": "ãƒãƒªï¼ã‚¢ãƒ«ã‚¼ãƒ³ãƒãƒ³å›½å¢ƒ", + "128": "アルゼンãƒãƒ³ã€ãƒ•フイ州", + "129": "アルゼンãƒãƒ³ã€ã‚µãƒ«ã‚¿å·ž", + "13": "コディアク島", + "130": "アルゼンãƒãƒ³ã€ã‚«ã‚¿ãƒžãƒ«ã‚«å·ž", + "131": "アルゼンãƒãƒ³ã€ãƒˆã‚¥ã‚¯ãƒžãƒ³å·ž", + "132": "アルゼンãƒãƒ³ã€ã‚µãƒ³ãƒ†ã‚£ã‚¢ã‚´ãƒ‡ãƒ«ã‚¨ã‚¹ãƒ†ãƒ­å·ž", + "133": "アルゼンãƒãƒ³åŒ—æ±éƒ¨", + "134": "ãƒãƒªä¸­éƒ¨æ²–", + "135": "ãƒãƒªä¸­éƒ¨æ²¿å²¸", + "136": "ãƒãƒªä¸­éƒ¨", + "137": "アルゼンãƒãƒ³ã€ã‚µãƒ³ãƒ•アン州", + "138": "アルゼンãƒãƒ³ã€ãƒ©ãƒªã‚ªãƒå·ž", + "139": "アルゼンãƒãƒ³ã€ãƒ¡ãƒ³ãƒ‰ã‚µå·ž", + "14": "キーナイåŠå³¶", + "140": "アルゼンãƒãƒ³ã€ã‚µãƒ³ãƒ«ã‚¤ã‚¹å·ž", + "141": "アルゼンãƒãƒ³ã€ã‚³ãƒ«ãƒ‰ãƒå·ž", + "142": "ウルグアイ", + "143": "ãƒãƒªå—部沖", + "144": "ãƒãƒªå—部", + "145": "ãƒãƒªå—部ï¼ã‚¢ãƒ«ã‚¼ãƒ³ãƒãƒ³å›½å¢ƒ", + "146": "アルゼンãƒãƒ³å—部", + "147": "ティエラデルフエゴ", + "148": "フォークランド諸島", + "149": "ドレーク海峡", + "15": "アラスカ湾", + "150": "スコシア海", + "151": "サウスジョージア島", + "152": "サウスジョージア海膨", + "153": "サウスサンドウィッãƒè«¸å³¶", + "154": "サウスシェトランド諸島", + "155": "å—æ¥µåŠå³¶", + "156": "大西洋å—西部", + "157": "ウェッデル海", + "158": "ニュージーランドã€åŒ—島西方沖", + "159": "ニュージーランドã€åŒ—å³¶", + "16": "ã‚¢ãƒªãƒ¥ãƒ¼ã‚·ãƒ£ãƒ³åˆ—å³¶å—æ–¹", + "160": "ニュージーランドã€åŒ—å³¶æ±æ–¹æ²–", + "161": "ニュージーランドã€å—島西方沖", + "162": "ニュージーランドã€å—å³¶", + "163": "クック海峡", + "164": "ニュージーランドã€å—å³¶æ±æ–¹æ²–", + "165": "マクオーリー島北方", + "166": "オークランド諸島", + "167": "マクオーリー島", + "168": "ãƒ‹ãƒ¥ãƒ¼ã‚¸ãƒ¼ãƒ©ãƒ³ãƒ‰å—æ–¹", + "169": "サモア諸島付近", + "17": "ã‚¢ãƒ©ã‚¹ã‚«å·žå—æ–¹", + "170": "サモア諸島", + "171": "ãƒ•ã‚£ã‚¸ãƒ¼è«¸å³¶å—æ–¹", + "172": "トンガ諸島西方", + "173": "トンガ諸島", + "174": "トンガ諸島付近", + "175": "ãƒˆãƒ³ã‚¬è«¸å³¶å—æ–¹", + "176": "ニュージーランド北方", + "177": "ケルマデック諸島付近", + "178": "ケルマデック諸島", + "179": "ã‚±ãƒ«ãƒžãƒ‡ãƒƒã‚¯è«¸å³¶å—æ–¹", + "18": "ユーコン準州å—部", + "180": "フィジー諸島北方", + "181": "フィジー諸島付近", + "182": "フィジー諸島", + "183": "サンタクルーズ諸島付近", + "184": "サンタクルーズ諸島", + "185": "ãƒãƒŒã‚¢ãƒ„諸島付近", + "186": "ãƒãƒŒã‚¢ãƒ„諸島", + "187": "ニューカレドニア", + "188": "ローヤリティー諸島", + "189": "ãƒ­ãƒ¼ãƒ¤ãƒªãƒ†ã‚£ãƒ¼è«¸å³¶å—æ±æ–¹", + "19": "ã‚¢ãƒ©ã‚¹ã‚«å·žå—æ±éƒ¨", + "190": "ニューアイルランド", + "191": "ソロモン諸島北方", + "192": "ニューブリテン", + "193": "ソロモン諸島", + "194": "ダントルカストー", + "195": "ã‚½ãƒ­ãƒ¢ãƒ³è«¸å³¶å—æ–¹", + "196": "パプア付近", + "197": "パプア北岸", + "198": "ニーニゴー諸島", + "199": "アドミラルティ", + "2": "アラスカ州å—部", + "20": "ã‚¢ãƒ©ã‚¹ã‚«å·žå—æ±éƒ¨æ²–", + "200": "ニューギニア北岸", + "201": "パプア", + "202": "ニューギニア", + "203": "ビスマルク海", + "204": "アルー諸島", + "205": "パプアå—岸", + "206": "ニューギニアå—岸", + "207": "ニューギニアæ±éƒ¨", + "208": "アラフラ海", + "209": "パラオ", + "21": "ãƒãƒ³ã‚¯ãƒ¼ãƒãƒ¼å³¶è¥¿æ–¹", + "210": "ãƒžãƒªã‚¢ãƒŠè«¸å³¶å—æ–¹", + "211": "æœ¬å·žå—æ±æ–¹", + "212": "å°ç¬ åŽŸè«¸å³¶", + "213": "硫黄列島", + "214": "マリアナ諸島西方", + "215": "マリアナ諸島付近", + "216": "マリアナ諸島", + "217": "カムãƒãƒ£ãƒ„ã‚«åŠå³¶", + "218": "カムãƒãƒ£ãƒ„ã‚«åŠå³¶æ±å²¸", + "219": "カムãƒãƒ£ãƒ„ã‚«åŠå³¶æ±æ–¹æ²–", + "22": "ãƒã‚¤ãƒ€ãƒ»ã‚°ãƒ¯ã‚¤", + "220": "åƒå³¶åˆ—島北西方", + "221": "åƒå³¶åˆ—å³¶", + "222": "åƒå³¶åˆ—å³¶æ±æ–¹", + "223": "日本海æ±éƒ¨", + "224": "北海é“", + "225": "北海é“å—æ±æ²–", + "226": "本州æ±éƒ¨è¥¿å²¸", + "227": "本州æ±éƒ¨", + "228": "本州æ±éƒ¨æ±å²¸", + "229": "æœ¬å·žæ±æ–¹æ²–", + "23": "ブリティッシュコロンビア州", + "230": "本州æ±éƒ¨å—岸", + "231": "韓国", + "232": "本州西部", + "233": "本州西部å—岸", + "234": "å—西諸島北西方", + "235": "ä¹å·ž", + "236": "四国", + "237": "四国嗿±æ–¹", + "238": "å—西諸島", + "239": "å—è¥¿è«¸å³¶å—æ±æ–¹", + "24": "アルãƒãƒ¼ã‚¿å·ž", + "240": "å°ç¬ åŽŸè«¸å³¶è¥¿æ–¹", + "241": "フィリピン海", + "242": "䏭国嗿±éƒ¨æ²¿å²¸", + "243": "å°æ¹¾ä»˜è¿‘", + "244": "å°æ¹¾", + "245": "å°æ¹¾åŒ—æ±æ–¹", + "246": "å—西諸島å—西部", + "247": "å°æ¹¾å—æ±æ–¹", + "248": "フィリピン諸島", + "249": "フィリピン諸島ã€ãƒ«ã‚½ãƒ³", + "25": "ãƒãƒ³ã‚¯ãƒ¼ãƒãƒ¼å³¶", + "250": "フィリピン諸島ã€ãƒŸãƒ³ãƒ‰ãƒ­", + "251": "フィリピン諸島ã€ã‚µãƒžãƒ«", + "252": "フィリピン諸島ã€ãƒ‘ラワン", + "253": "スールー海", + "254": "フィリピン諸島ã€ãƒ‘ナイ", + "255": "フィリピン諸島ã€ã‚»ãƒ–", + "256": "フィリピン諸島ã€ãƒ¬ã‚¤ãƒ†", + "257": "フィリピン諸島ã€ãƒã‚°ãƒ­ã‚¹", + "258": "フィリピン諸島ã€ã‚¹ãƒ¼ãƒ«ãƒ¼è«¸å³¶", + "259": "フィリピン諸島ã€ãƒŸãƒ³ãƒ€ãƒŠã‚ª", + "26": "ワシントン州沖", + "260": "ãƒ•ã‚£ãƒªãƒ”ãƒ³è«¸å³¶æ±æ–¹", + "261": "カリマンタン", + "262": "セレベス海", + "263": "タラウド諸島", + "264": "ãƒãƒ«ãƒžãƒ˜ãƒ©åŒ—æ–¹", + "265": "スラウェシã€ãƒŸãƒŠãƒã‚µåŠå³¶", + "266": "モルッカ海", + "267": "ãƒãƒ«ãƒžãƒ˜ãƒ©", + "268": "スラウェシ", + "269": "スラ諸島", + "27": "ワシントン州沿岸", + "270": "セラム海", + "271": "ブル", + "272": "セラム", + "273": "スマトラå—西方", + "274": "スマトラå—部", + "275": "ジャワ海", + "276": "スンダ海峡", + "277": "ジャワ", + "278": "ãƒãƒªæµ·", + "279": "フローレス海", + "28": "ワシントンï¼ã‚ªãƒ¬ã‚´ãƒ³å·žå¢ƒ", + "280": "ãƒãƒ³ãƒ€æµ·", + "281": "タニンãƒãƒ«è«¸å³¶", + "282": "ã‚¸ãƒ£ãƒ¯å—æ–¹", + "283": "ãƒãƒª", + "284": "ãƒãƒªå—æ–¹", + "285": "スンãƒãƒ¯", + "286": "フローレス", + "287": "スンãƒ", + "288": "サブ海", + "289": "ティモール島", + "29": "ワシントン州", + "290": "ティモール海", + "291": "スンãƒãƒ¯å—æ–¹", + "292": "スンãƒå—æ–¹", + "293": "ãƒ†ã‚£ãƒ¢ãƒ¼ãƒ«å—æ–¹", + "294": "ミャンマーï¼ã‚¤ãƒ³ãƒ‰å›½å¢ƒ", + "295": "ミャンマーï¼ãƒãƒ³ã‚°ãƒ©ãƒ‡ã‚·ãƒ¥å›½å¢ƒ", + "296": "ミャンマー", + "297": "ミャンマーï¼ä¸­å›½å›½å¢ƒ", + "298": "ミャンマーå—岸", + "299": "ã‚¢ã‚¸ã‚¢å—æ±éƒ¨", + "3": "ベーリング海", + "30": "オレゴン州沖", + "300": "ä¸­å›½ã€æµ·å—å³¶", + "301": "å—シナ海", + "302": "カシミールæ±éƒ¨", + "303": "カシミールï¼ã‚¤ãƒ³ãƒ‰å¢ƒç•Œ", + "304": "カシミールï¼ãƒãƒ™ãƒƒãƒˆè‡ªæ²»åŒºï¼ˆä¸­å›½ï¼‰å¢ƒç•Œ", + "305": "ãƒãƒ™ãƒƒãƒˆè‡ªæ²»åŒºè¥¿éƒ¨ï¼ˆä¸­å›½ï¼‰ï¼ã‚¤ãƒ³ãƒ‰å›½å¢ƒ", + "306": "ãƒãƒ™ãƒƒãƒˆè‡ªæ²»åŒºï¼ˆä¸­å›½ï¼‰", + "307": "中国ã€ã‚¹ãƒ¼ãƒãƒ§ãƒ¯ãƒ³ï¼ˆå››å·ï¼‰çœ", + "308": "インド北部", + "309": "ãƒãƒ‘ールï¼ã‚¤ãƒ³ãƒ‰å›½å¢ƒ", + "31": "オレゴン州沿岸", + "310": "ãƒãƒ‘ール", + "311": "インドã€ã‚·ãƒƒã‚­ãƒ å·ž", + "312": "ブータン", + "313": "ãƒãƒ™ãƒƒãƒˆè‡ªæ²»åŒºæ±éƒ¨ï¼ˆä¸­å›½ï¼‰ï¼ã‚¤ãƒ³ãƒ‰å›½å¢ƒ", + "314": "インドå—部", + "315": "インドï¼ãƒãƒ³ã‚°ãƒ©ãƒ‡ã‚·ãƒ¥å›½å¢ƒ", + "316": "ãƒãƒ³ã‚°ãƒ©ãƒ‡ã‚·ãƒ¥", + "317": "インド北æ±éƒ¨", + "318": "中国ã€ãƒ¦ãƒ³ãƒŠãƒ³ï¼ˆé›²å—)çœ", + "319": "ベンガル湾", + "32": "オレゴン州", + "320": "キルギスï¼ã‚·ãƒ³ãƒã‚¢ãƒ³ã‚¦ã‚¤ã‚°ãƒ«è‡ªæ²»åŒºï¼ˆä¸­å›½ï¼‰å›½å¢ƒ", + "321": "中国ã€ã‚·ãƒ³ãƒã‚¢ãƒ³ã‚¦ã‚¤ã‚°ãƒ«è‡ªæ²»åŒºå—部", + "322": "中国ã€ã‚«ãƒ³ã‚¹ãƒ¼ï¼ˆç”˜ç²›ï¼‰çœ", + "323": "中国ã€ãƒã‚¤ãƒ¢ãƒ³ã‚¯ãƒ¼ï¼ˆå†…è’™å¤ï¼‰è‡ªæ²»åŒºè¥¿éƒ¨", + "324": "カシミールï¼ã‚·ãƒ³ãƒã‚¢ãƒ³ã‚¦ã‚¤ã‚°ãƒ«è‡ªæ²»åŒºï¼ˆä¸­å›½ï¼‰å¢ƒç•Œ", + "325": "中国ã€ãƒãƒ³ãƒã‚¤ï¼ˆé’海)çœ", + "326": "シベリアå—西部", + "327": "ãƒã‚¤ã‚«ãƒ«æ¹–", + "328": "ãƒã‚¤ã‚«ãƒ«æ¹–æ±æ–¹", + "329": "カザフスタンæ±éƒ¨", + "33": "アイダホ州西部", + "330": "イシククル湖", + "331": "カザフスタンï¼ã‚·ãƒ³ãƒã‚¢ãƒ³ã‚¦ã‚¤ã‚°ãƒ«è‡ªæ²»åŒºï¼ˆä¸­å›½ï¼‰å›½å¢ƒ", + "332": "中国ã€ã‚·ãƒ³ãƒã‚¢ãƒ³ã‚¦ã‚¤ã‚°ãƒ«è‡ªæ²»åŒºåŒ—部", + "333": "ロシアï¼ãƒ¢ãƒ³ã‚´ãƒ«å›½å¢ƒ", + "334": "モンゴル", + "335": "ウラル山脈", + "336": "カザフスタン西部", + "337": "コーカサスæ±éƒ¨", + "338": "カスピ海", + "339": "ウズベキスタン西部", + "34": "カリフォルニア州北部沖", + "340": "トルクメニスタン", + "341": "トルクメニスタンï¼ã‚¤ãƒ©ãƒ³å›½å¢ƒ", + "342": "トルクメニスタンï¼ã‚¢ãƒ•ガニスタン国境", + "343": "トルコï¼ã‚¤ãƒ©ãƒ³å›½å¢ƒ", + "344": "イランï¼ã‚¢ãƒ«ãƒ¡ãƒ‹ã‚¢ï¼ã‚¢ã‚¼ãƒ«ãƒã‚¤ã‚¸ãƒ£ãƒ³å›½å¢ƒ", + "345": "イラン北西部", + "346": "イランï¼ã‚¤ãƒ©ã‚¯å›½å¢ƒ", + "347": "イラン西部", + "348": "イラン中央部", + "349": "アフガニスタン北西部", + "35": "カリフォルニア州北部沿岸", + "350": "アフガニスタンå—西部", + "351": "アラビアåŠå³¶æ±éƒ¨", + "352": "ペルシャ湾", + "353": "イラン", + "354": "パキスタンå—西部", + "355": "オマーン湾", + "356": "パキスタン沖", + "357": "ウクライナï¼ãƒ¢ãƒ«ãƒ‰ãƒï¼ãƒ­ã‚·ã‚¢å—西部", + "358": "ルーマニア", + "359": "ブルガリア", + "36": "カリフォルニア州北部", + "360": "é»’æµ·", + "361": "クリミア", + "362": "コーカサス北西部", + "363": "ギリシャï¼ãƒ–ルガリア国境", + "364": "ギリシャ", + "365": "エーゲ海", + "366": "トルコ", + "367": "トルコï¼ã‚¸ãƒ§ãƒ¼ã‚¸ã‚¢ï¼ã‚¢ãƒ«ãƒ¡ãƒ‹ã‚¢å›½å¢ƒ", + "368": "ギリシャå—部", + "369": "ギリシャã€ãƒ‰ãƒ‡ã‚«ãƒã‚¹è«¸å³¶", + "37": "ãƒãƒãƒ€å·ž", + "370": "ギリシャã€ã‚¯ãƒ¬ã‚¿", + "371": "地中海æ±éƒ¨", + "372": "キプロス", + "373": "死海", + "374": "ヨルダンï¼ã‚·ãƒªã‚¢", + "375": "イラク", + "376": "ãƒãƒ«ãƒˆã‚¬ãƒ«", + "377": "スペイン", + "378": "ピレãƒãƒ¼å±±è„ˆ", + "379": "フランスå—岸", + "38": "カリフォルニア州沖", + "380": "フランスã€ã‚³ãƒ«ã‚·ã‚«", + "381": "イタリア中央部", + "382": "アドリア海", + "383": "ãƒãƒ«ã‚«ãƒ³åŠå³¶åŒ—西部", + "384": "ジブラルタル西方", + "385": "ジブラルタル海峡", + "386": "スペインã€ãƒãƒ¬ã‚¢ãƒ¬ã‚¹è«¸å³¶", + "387": "地中海西部", + "388": "イタリアã€ã‚µãƒ«ãƒ‡ãƒ¼ãƒ‹ãƒ£", + "389": "ティレニア海", + "39": "カリフォルニア州中部", + "390": "イタリアå—部", + "391": "アルãƒãƒ‹ã‚¢", + "392": "ギリシャï¼ã‚¢ãƒ«ãƒãƒ‹ã‚¢å›½å¢ƒ", + "393": "マデイラ諸島", + "394": "カナリア諸島", + "395": "モロッコ", + "396": "アルジェリア北部", + "397": "ãƒãƒ¥ãƒ‹ã‚¸ã‚¢", + "398": "イタリアã€ã‚·ãƒãƒªã‚¢", + "399": "イオニア海", + "4": "コマンドル諸島", + "40": "カリフォルニアï¼ãƒãƒãƒ€å·žå¢ƒ", + "400": "地中海中央部", + "401": "リビア沿岸", + "402": "北大西洋", + "403": "大西洋中央海嶺北部", + "404": "アゾレス諸島付近", + "405": "アゾレス諸島", + "406": "大西洋中央海嶺中部", + "407": "アセンション島北方", + "408": "アセンション島", + "409": "å—大西洋", + "41": "ãƒãƒãƒ€å·žå—部", + "410": "大西洋中央海嶺å—部", + "411": "トリスタンダクーニャ諸島", + "412": "ブーヴェ島", + "413": "アフリカå—西方", + "414": "å¤§è¥¿æ´‹å—æ±éƒ¨", + "415": "アデン湾æ±éƒ¨", + "416": "ソコトラ島", + "417": "アラビア海", + "418": "インドã€ãƒ©ã‚¯ã‚·ãƒ£ãƒ‰ã‚¦ã‚£ãƒ¼ãƒ—", + "419": "ソマリア北æ±éƒ¨", + "42": "アリゾナ州西部", + "420": "北インド洋", + "421": "カールスãƒãƒ¼ã‚°æµ·å¶º", + "422": "モルディブ諸島", + "423": "ラカディブ海", + "424": "スリランカ", + "425": "å—インド洋", + "426": "ãƒãƒ£ã‚´ã‚¹è«¸å³¶", + "427": "モーリシャスï¼ãƒ¬ãƒ¦ãƒ‹ã‚ªãƒ³", + "428": "å—西インド洋海嶺", + "429": "中央インド洋海嶺", + "43": "カリフォルニア州å—部", + "430": "ã‚¢ãƒ•ãƒªã‚«å—æ–¹", + "431": "プリンスエドワード諸島", + "432": "クロゼ諸島", + "433": "ケルゲレン諸島", + "434": "ブロークン海嶺", + "435": "å—æ±ã‚¤ãƒ³ãƒ‰æ´‹æµ·å¶º", + "436": "ケルゲレン海å°å—部", + "437": "ã‚ªãƒ¼ã‚¹ãƒˆãƒ©ãƒªã‚¢å—æ–¹", + "438": "サスカãƒãƒ¥ãƒ¯ãƒ³å·ž", + "439": "マニトãƒå·ž", + "44": "カリフォルニアï¼ã‚¢ãƒªã‚¾ãƒŠå·žå¢ƒ", + "440": "ãƒãƒ‰ã‚½ãƒ³æ¹¾", + "441": "オンタリオ州", + "442": "ãƒãƒ‰ã‚½ãƒ³æµ·å³¡", + "443": "ケベック州北部", + "444": "デービス海峡", + "445": "ラブラドル", + "446": "ラブラドル海", + "447": "ケベック州å—部", + "448": "ガスペåŠå³¶", + "449": "ケベック州æ±éƒ¨", + "45": "カリフォルニア州(米国)ï¼ãƒ¡ã‚­ã‚·ã‚³å›½å¢ƒ", + "450": "アンãƒã‚³ã‚¹ãƒå³¶", + "451": "ニューブランズウィック州", + "452": "ノãƒã‚¹ã‚³ã‚·ã‚¢å·ž", + "453": "プリンスエドワード島", + "454": "セントローレンス湾", + "455": "ニューファンドランド", + "456": "モンタナ州", + "457": "アイダホ州æ±éƒ¨", + "458": "モンタナ州ヘブゲン湖", + "459": "ワイオミング州イエローストーン", + "46": "アリゾナ州(米国)ï¼ã‚½ãƒŽãƒ©å·žï¼ˆãƒ¡ã‚­ã‚·ã‚³ï¼‰å¢ƒè¥¿éƒ¨", + "460": "ワイオミング州", + "461": "ノースダコタ州", + "462": "サウスダコタ州", + "463": "ãƒãƒ–ラスカ州", + "464": "ミãƒã‚½ã‚¿å·ž", + "465": "アイオワ州", + "466": "ウィスコンシン州", + "467": "イリノイ州", + "468": "ミシガン州", + "469": "インディアナ州", + "47": "ãƒãƒã‚«ãƒªãƒ•ォルニア州西方沖", + "470": "オンタリオ州å—部", + "471": "オãƒã‚¤ã‚ªå·ž", + "472": "ニューヨーク州", + "473": "ペンシルãƒãƒ‹ã‚¢å·ž", + "474": "ãƒãƒ¼ãƒ¢ãƒ³ãƒˆï¼ãƒ‹ãƒ¥ãƒ¼ãƒãƒ³ãƒ—シャー州", + "475": "メーン州", + "476": "ニューイングランドå—部", + "477": "メーン湾", + "478": "ユタ州", + "479": "コロラド州", + "48": "ãƒãƒã‚«ãƒªãƒ•ォルニア州", + "480": "カンザス州", + "481": "アイオワï¼ãƒŸã‚ºãƒ¼ãƒªå·žå¢ƒ", + "482": "ミズーリï¼ã‚«ãƒ³ã‚¶ã‚¹å·žå¢ƒ", + "483": "ミズーリ州", + "484": "ミズーリï¼ã‚¢ãƒ¼ã‚«ãƒ³ã‚½ãƒ¼å·žå¢ƒ", + "485": "ミズーリï¼ã‚¤ãƒªãƒŽã‚¤å·žå¢ƒ", + "486": "ãƒŸã‚ºãƒ¼ãƒªå·žå—æ±éƒ¨", + "487": "ミズーリ州ã€ã‚±ãƒ¼ãƒ—ジラード", + "488": "イリノイ州å—部", + "489": "インディアナ州å—部", + "49": "カリフォルニア湾", + "490": "ケンタッキー州", + "491": "ウェストãƒãƒ¼ã‚¸ãƒ‹ã‚¢å·ž", + "492": "ãƒãƒ¼ãƒ‹ã‚¸ã‚¢å·ž", + "493": "ãƒã‚§ã‚µãƒ”ーク湾", + "494": "ニュージャージー州", + "495": "アリゾナ州æ±éƒ¨", + "496": "ニューメキシコ州", + "497": "テキサス州北西部ï¼ã‚ªã‚¯ãƒ©ãƒ›ãƒžå·žå¢ƒ", + "498": "テキサス州西部", + "499": "オクラホマ州", + "5": "アリューシャン列島ニア諸島", + "50": "ソノラ州", + "500": "テキサス州中部", + "501": "アーカンソーï¼ã‚ªã‚¯ãƒ©ãƒ›ãƒžå·žå¢ƒ", + "502": "アーカンソー州", + "503": "ルイジアナï¼ãƒ†ã‚­ã‚µã‚¹å·žå¢ƒ", + "504": "ルイジアナ州", + "505": "ミシシッピ州", + "506": "テãƒã‚·ãƒ¼å·ž", + "507": "アラãƒãƒžå·ž", + "508": "フロリダ州西部", + "509": "米国ã€ã‚¸ãƒ§ãƒ¼ã‚¸ã‚¢å·ž", + "51": "メキシコ中部沖", + "510": "フロリダï¼ã‚¸ãƒ§ãƒ¼ã‚¸ã‚¢å·žå¢ƒ", + "511": "サウスカロライナ州", + "512": "ノースカロライナ州", + "513": "ç±³å›½æ±æ–¹æ²–", + "514": "フロリダåŠå³¶", + "515": "ãƒãƒãƒžè«¸å³¶", + "516": "アリゾナ州(米国)ï¼ã‚½ãƒŽãƒ©å·žï¼ˆãƒ¡ã‚­ã‚·ã‚³ï¼‰å¢ƒæ±éƒ¨", + "517": "ニューメキシコ州(米国)ï¼ãƒãƒ¯ãƒ¯å·žï¼ˆãƒ¡ã‚­ã‚·ã‚³ï¼‰å¢ƒ", + "518": "テキサス州(米国)ï¼ãƒ¡ã‚­ã‚·ã‚³å›½å¢ƒ", + "519": "テキサス州å—部", + "52": "メキシコ中部沿岸", + "520": "テキサス州沿岸", + "521": "メキシコã€ãƒãƒ¯ãƒ¯å·ž", + "522": "メキシコ北部", + "523": "メキシコ中部", + "524": "メキシコã€ãƒãƒªã‚¹ã‚³å·ž", + "525": "メキシコã€ãƒ™ãƒ©ã‚¯ãƒ«ã‚¹å·ž", + "526": "メキシコ湾", + "527": "カンペãƒã‚§æ¹¾", + "528": "ブラジル", + "529": "ガイアナ", + "53": "レビージャヒヘード諸島", + "530": "スリナム", + "531": "ä»é ˜ã‚®ã‚¢ãƒŠ", + "532": "アイルランド", + "533": "イギリス", + "534": "北海", + "535": "ノルウェーå—部", + "536": "スウェーデン", + "537": "ãƒãƒ«ãƒˆæµ·", + "538": "フランス", + "539": "ビスケー湾", + "54": "ãƒãƒªã‚¹ã‚³å·žæ²–", + "540": "オランダ", + "541": "ベルギー", + "542": "デンマーク", + "543": "ドイツ", + "544": "スイス", + "545": "イタリア北部", + "546": "オーストリア", + "547": "ãƒã‚§ã‚³åŠã³ã‚¹ãƒ­ãƒã‚­ã‚¢", + "548": "ãƒãƒ¼ãƒ©ãƒ³ãƒ‰", + "549": "ãƒãƒ³ã‚¬ãƒªãƒ¼", + "55": "ãƒãƒªã‚¹ã‚³å·žæ²¿å²¸", + "550": "アフリカ北西部", + "551": "アルジェリアå—部", + "552": "リビア", + "553": "エジプト", + "554": "ç´…æµ·", + "555": "アラビアåŠå³¶è¥¿éƒ¨", + "556": "ãƒãƒ£ãƒ‰", + "557": "スーダン", + "558": "エãƒã‚ªãƒ”ã‚¢", + "559": "アデン湾西部", + "56": "ミãƒãƒ§ã‚¢ã‚«ãƒ³å·žæ²¿å²¸", + "560": "ソマリア北西部", + "561": "åŒ—è¥¿ã‚¢ãƒ•ãƒªã‚«å—æ–¹æ²–", + "562": "カメルーン", + "563": "赤é“ギニア", + "564": "中央アフリカ共和国", + "565": "ガボン", + "566": "コンゴ共和国", + "567": "コンゴ民主共和国", + "568": "ウガンダ", + "569": "ビクトリア湖", + "57": "ミãƒãƒ§ã‚¢ã‚«ãƒ³å·ž", + "570": "ケニア", + "571": "ソマリアå—部", + "572": "タンガニーカ湖", + "573": "タンザニア", + "574": "マダガスカル北西方", + "575": "アンゴラ", + "576": "ザンビア", + "577": "マラウイ", + "578": "ナミビア", + "579": "ボツワナ", + "58": "ゲレロ州沿岸", + "580": "ジンãƒãƒ–エ", + "581": "モザンビーク", + "582": "モザンビーク海峡", + "583": "マダガスカル", + "584": "å—アフリカ共和国", + "585": "レソト", + "586": "スワジランド", + "587": "å—アフリカ沖", + "588": "オーストラリア北西方", + "589": "オーストラリア西方", + "59": "ゲレロ州", + "590": "ウェスタンオーストラリア", + "591": "ノーザンテリトリー", + "592": "サウスオーストラリア", + "593": "カーペンタリア湾", + "594": "クィーンズランド", + "595": "コーラル海", + "596": "ニューカレドニア北西方", + "597": "ニューカレドニアå—西方", + "598": "オーストラリアå—西方", + "599": "ã‚ªãƒ¼ã‚¹ãƒˆãƒ©ãƒªã‚¢å—æ–¹æ²–", + "6": "アリューシャン列島ラット諸島", + "60": "オアãƒã‚«å·ž", + "600": "オーストラリアå—岸", + "601": "ニューサウスウェールズ", + "602": "オーストラリアã€ãƒ“クトリア", + "603": "ã‚ªãƒ¼ã‚¹ãƒˆãƒ©ãƒªã‚¢å—æ±å²¸", + "604": "オーストラリアæ±å²¸", + "605": "ã‚ªãƒ¼ã‚¹ãƒˆãƒ©ãƒªã‚¢æ±æ–¹", + "606": "ノーフォーク島", + "607": "ニュージーランド北西方", + "608": "ãƒã‚¹æµ·å³¡", + "609": "タスマニア", + "61": "ãƒã‚¢ãƒ‘ス州", + "610": "ã‚ªãƒ¼ã‚¹ãƒˆãƒ©ãƒªã‚¢å—æ±æ–¹", + "611": "北太平洋", + "612": "ãƒãƒ¯ã‚¤è«¸å³¶", + "613": "ãƒãƒ¯ã‚¤å·ž", + "614": "ミクロãƒã‚·ã‚¢é€£é‚¦", + "615": "マーシャル諸島", + "616": "マーシャル諸島ã€ã‚¨ãƒ‹ã‚¦ã‚§ãƒˆã‚¯ç’°ç¤", + "617": "マーシャル諸島ã€ãƒ“キニ環ç¤", + "618": "ギルãƒãƒ¼ãƒˆè«¸å³¶", + "619": "ジョンストン島", + "62": "メキシコï¼ã‚°ã‚¢ãƒ†ãƒžãƒ©å›½å¢ƒ", + "620": "ライン諸島", + "621": "パルミラ島", + "622": "キリティマティ", + "623": "ツãƒãƒ«", + "624": "フェニックス諸島", + "625": "トケラウ諸島", + "626": "クック諸島北部", + "627": "クック諸島", + "628": "ソシエテ諸島", + "629": "トゥブアイ諸島", + "63": "メキシコ沖", + "630": "マルキーズ諸島", + "631": "トゥアモトウ諸島", + "632": "å—太平洋", + "633": "ロモノソフ海嶺", + "634": "北極海", + "635": "グリーンランド(カラーリットヌナート)北岸", + "636": "グリーンランド(カラーリットヌナート)æ±éƒ¨", + "637": "アイスランド付近", + "638": "アイスランド", + "639": "ヤンマイエン島", + "64": "ミãƒãƒ§ã‚¢ã‚«ãƒ³å·žæ²–", + "640": "グリーンランド海", + "641": "スãƒãƒ¼ãƒ«ãƒãƒ«åŒ—æ–¹", + "642": "ノルウェー海", + "643": "スãƒãƒ¼ãƒ«ãƒãƒ«", + "644": "フランツヨーゼフランド北方", + "645": "フランツヨーゼフランド", + "646": "ノルウェー北部", + "647": "ãƒãƒ¬ãƒ³ãƒ„æµ·", + "648": "ノãƒãƒ¤ã‚¼ãƒ ãƒªãƒ£", + "649": "カラ海", + "65": "ゲレロ州沖", + "650": "シベリア北西部沿岸", + "651": "セーベルナヤゼムリャ北方", + "652": "セーベルナヤゼムリャ", + "653": "シベリア北部沿岸", + "654": "ã‚»ãƒ¼ãƒ™ãƒ«ãƒŠãƒ¤ã‚¼ãƒ ãƒªãƒ£æ±æ–¹", + "655": "ラプテフ海", + "656": "ã‚·ãƒ™ãƒªã‚¢å—æ±éƒ¨", + "657": "ロシアæ±éƒ¨ï¼ä¸­å›½åŒ—æ±éƒ¨å›½å¢ƒ", + "658": "中国北æ±éƒ¨", + "659": "北æœé®®", + "66": "オアãƒã‚«å·žæ²¿å²¸", + "660": "日本海", + "661": "沿海地方", + "662": "サãƒãƒªãƒ³å³¶", + "663": "オホーツク海", + "664": "䏭国嗿±éƒ¨", + "665": "黄海", + "666": "䏭国嗿±éƒ¨æ±æ–¹æ²–", + "667": "ノボシビルスク(ニューシベリアン)諸島北方", + "668": "ノボシビルスク(ニューシベリアン)諸島", + "669": "æ±ã‚·ãƒ™ãƒªã‚¢æµ·", + "67": "オアãƒã‚«å·žæ²–", + "670": "シベリアæ±éƒ¨åŒ—岸", + "671": "シベリアæ±éƒ¨", + "672": "ãƒãƒ¥ã‚¯ãƒæµ·", + "673": "ベーリング海峡", + "674": "セントローレンス島", + "675": "ボーフォート海", + "676": "アラスカ北部", + "677": "ユーコン準州北部", + "678": "クイーンエリザベス諸島", + "679": "ノースウェスト準州ï¼ãƒŒãƒŠãƒ–ト準州", + "68": "ãƒã‚¢ãƒ‘ス州沖", + "680": "グリーンランド(カラーリットヌナート)西部", + "681": "ãƒãƒ•ィン湾", + "682": "ãƒãƒ•ィン島", + "683": "ä¸­å¤®å¤ªå¹³æ´‹å—æ±éƒ¨", + "684": "æ±å¤ªå¹³æ´‹æµ·è†¨å—部", + "685": "イースター島", + "686": "西ãƒãƒªæµ·è†¨", + "687": "ファンフェルナンデス群島", + "688": "ãƒ‹ãƒ¥ãƒ¼ã‚¸ãƒ¼ãƒ©ãƒ³ãƒ‰åŒ—å³¶æ±æ–¹", + "689": "ãƒãƒ£ã‚¿ãƒ è«¸å³¶", + "69": "ãƒã‚¢ãƒ‘ス州沿岸", + "690": "ãƒãƒ£ã‚¿ãƒ è«¸å³¶å—æ–¹", + "691": "太平洋ï¼å—極海嶺", + "692": "太平洋å—部", + "693": "中央太平洋æ±éƒ¨", + "694": "æ±å¤ªå¹³æ´‹æµ·å¶ºä¸­éƒ¨", + "695": "ガラパゴス諸島西方", + "696": "ガラパゴス諸島付近", + "697": "ガラパゴス諸島", + "698": "ガラパゴス諸島å—西方", + "699": "ã‚¬ãƒ©ãƒ‘ã‚´ã‚¹è«¸å³¶å—æ±æ–¹", + "7": "アリューシャン列島アンドリアノフ諸島", + "70": "グアテマラ", + "700": "ã‚¿ã‚¹ãƒžãƒ‹ã‚¢å—æ–¹", + "701": "マクオーリー島西方", + "702": "ãƒãƒ¬ãƒ‹ãƒ¼è«¸å³¶", + "703": "アンダマン諸島", + "704": "ニコãƒãƒ«è«¸å³¶", + "705": "スマトラ北部西方沖", + "706": "スマトラ北部", + "707": "マレーåŠå³¶", + "708": "タイ湾", + "709": "アフガニスタン", + "71": "グアテマラ沿岸", + "710": "パキスタン", + "711": "カシミールå—西部", + "712": "インドï¼ãƒ‘キスタン国境", + "713": "カザフスタン中部", + "714": "ウズベキスタンæ±éƒ¨", + "715": "タジキスタン", + "716": "キルギス", + "717": "アフガニスタンï¼ã‚¿ã‚¸ã‚­ã‚¹ã‚¿ãƒ³å›½å¢ƒ", + "718": "アフガニスタンã€ãƒ’ンドゥークシ", + "719": "タジキスタンï¼ã‚·ãƒ³ãƒã‚¢ãƒ³ã‚¦ã‚¤ã‚°ãƒ«è‡ªæ²»åŒºï¼ˆä¸­å›½ï¼‰å¢ƒ", + "72": "ホンジュラス", + "720": "カシミール北西部", + "721": "フィンランド", + "722": "ノルウェーï¼ãƒ ãƒ«ãƒžãƒ³ã‚¹ã‚¯ï¼ˆãƒ­ã‚·ã‚¢ï¼‰å¢ƒ", + "723": "フィンランドï¼ã‚«ãƒ¬ãƒªã‚¢å…±å’Œå›½ï¼ˆãƒ­ã‚·ã‚¢ï¼‰å¢ƒ", + "724": "ãƒãƒ«ãƒˆè«¸å›½ï¼ãƒ™ãƒ©ãƒ«ãƒ¼ã‚·ï¼ãƒ­ã‚·ã‚¢åŒ—西部", + "725": "シベリア北西部", + "726": "シベリア北・中部", + "727": "å—æ¥µã€ãƒ“クトリアランド", + "728": "ロス海", + "729": "å—æ¥µå¤§é™¸", + "73": "エルサルãƒãƒ‰ãƒ«", + "730": "æ±å¤ªå¹³æ´‹æµ·è†¨åŒ—部", + "731": "ホンジュラス北方", + "732": "サウスサンドウィッãƒè«¸å³¶æ±æ–¹", + "733": "タイ", + "734": "ラオス", + "735": "カンボジア", + "736": "ベトナム", + "737": "トンキン湾", + "738": "レイキャãƒã‚¹æµ·å¶º", + "739": "アゾレスï¼ã‚»ãƒ³ãƒˆãƒ“ンセント岬海嶺", + "74": "ニカラグア沿岸", + "740": "オーエン断裂帯", + "741": "インド洋三é‡ä¼šåˆç‚¹", + "742": "インドï¼å—極海嶺西部", + "743": "西サãƒãƒ©", + "744": "モーリタニア", + "745": "マリ", + "746": "ã‚»ãƒã‚¬ãƒ«ï¼ã‚¬ãƒ³ãƒ“ã‚¢", + "747": "ギニア", + "748": "シエラレオãƒ", + "749": "リベリア", + "75": "ニカラグア", + "750": "コートジボワール", + "751": "ブルキナファソ", + "752": "ガーナ", + "753": "ベナンï¼ãƒˆãƒ¼ã‚´", + "754": "ニジェール", + "755": "ナイジェリア", + "756": "ã‚¤ãƒ¼ã‚¹ã‚¿ãƒ¼å³¶å—æ±æ–¹", + "757": "ガラパゴス三é‡ä¼šåˆç‚¹", + "76": "中央アメリカ沖", + "77": "コスタリカ沖", + "78": "コスタリカ", + "79": "パナマ北方", + "8": "プリビロフ諸島", + "80": "パナマï¼ã‚³ã‚¹ã‚¿ãƒªã‚«å›½å¢ƒ", + "81": "パナマ", + "82": "パナマï¼ã‚³ãƒ­ãƒ³ãƒ“ア国境", + "83": "ãƒ‘ãƒŠãƒžå—æ–¹", + "84": "メキシコã€ãƒ¦ã‚«ã‚¿ãƒ³åŠå³¶", + "85": "キューãƒ", + "86": "ジャマイカ", + "87": "ãƒã‚¤ãƒ", + "88": "ドミニカ共和国", + "89": "モナ海峡", + "9": "アリューシャン列島フォックス諸島", + "90": "プエルトリコ", + "91": "ãƒãƒ¼ã‚¸ãƒ³è«¸å³¶", + "92": "リワード諸島", + "93": "ベリーズ", + "94": "カリブ海", + "95": "ウィンドワード諸島", + "96": "コロンビア北岸", + "97": "ベãƒã‚ºã‚¨ãƒ©æ²¿å²¸", + "98": "トリニダード・トãƒã‚´", + "99": "コロンビア北部", + "AU": "オーストラリア", + "CA": "カナダ", + "CL": "ãƒãƒª", + "ES": "スペイン", + "ID": "インドãƒã‚·ã‚¢", + "IN": "インド", + "JP": "日本", + "KG": "キルギス", + "KI": "キリãƒã‚¹", + "MacroregionFormat": "{0}ã€{1}", + "MX": "メキシコ", + "NO": "ノルウェー", + "NZ": "ニュージーランド", + "PG": "パプアニューギニア", + "PT": "ãƒãƒ«ãƒˆã‚¬ãƒ«", + "RU": "ロシア", + "UA": "ウクライナ", + "US": "米国", + "ZA": "å—アフリカ" + } +} \ No newline at end of file diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.FERegion/ja.json.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.FERegion/ja.json.meta new file mode 100644 index 0000000..34cd24f --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.FERegion/ja.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 8155c795e9d3c8e42958e8439adaa059 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.FERegion/und.json b/Assets/StreamingAssets/Messages/Cryville.EEW.FERegion/und.json new file mode 100644 index 0000000..ae6ab8a --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.FERegion/und.json @@ -0,0 +1,781 @@ +{ + "Culture": "en-US", + "Strings": { + "1": "central Alaska", + "10": "Unimak Island", + "100": "Lago de Maracaibo, Venezuela", + "101": "Venezuela", + "102": "near the west coast of Colombia", + "103": "Colombia", + "104": "off the coast of Ecuador", + "105": "near the coast of Ecuador", + "106": "Colombia-Ecuador border", + "107": "Ecuador", + "108": "off the coast of northern Peru", + "109": "near the coast of northern Peru", + "11": "Bristol Bay", + "110": "Peru-Ecuador border", + "111": "northern Peru", + "112": "Peru-Brazil border", + "113": "Amazonas, Brazil", + "114": "off the coast of central Peru", + "115": "near the coast of central Peru", + "116": "central Peru", + "117": "southern Peru", + "118": "Peru-Bolivia border", + "119": "northern Bolivia", + "12": "Alaska Peninsula", + "120": "central Bolivia", + "121": "off the coast of northern Chile", + "122": "near the coast of northern Chile", + "123": "northern Chile", + "124": "Chile-Bolivia border", + "125": "southern Bolivia", + "126": "Paraguay", + "127": "Chile-Argentina border", + "128": "Jujuy, Argentina", + "129": "Salta, Argentina", + "13": "Kodiak Island", + "130": "Catamarca, Argentina", + "131": "Tucuman, Argentina", + "132": "Santiago del Estero, Argentina", + "133": "northeastern Argentina", + "134": "off the coast of central Chile", + "135": "near the coast of central Chile", + "136": "central Chile", + "137": "San Juan, Argentina", + "138": "La Rioja, Argentina", + "139": "Mendoza, Argentina", + "14": "Kenai Peninsula", + "140": "San Luis, Argentina", + "141": "Cordoba, Argentina", + "142": "Uruguay", + "143": "off the coast of southern Chile", + "144": "southern Chile", + "145": "southern Chile-Argentina border", + "146": "southern Argentina", + "147": "Tierra del Fuego", + "148": "Falkland Islands", + "149": "Drake Passage", + "15": "Gulf of Alaska", + "150": "Scotia Sea", + "151": "South Georgia Island", + "152": "South Georgia Rise", + "153": "South Sandwich Islands", + "154": "South Shetland Islands", + "155": "Antarctic Peninsula", + "156": "southwestern Atlantic Ocean", + "157": "Weddell Sea", + "158": "off the west coast of the North Island of New Zealand", + "159": "North Island of New Zealand", + "16": "south of the Aleutian Islands", + "160": "off the east coast of the North Island of New Zealand", + "161": "off the west coast of the South Island of New Zealand", + "162": "South Island of New Zealand", + "163": "Cook Strait", + "164": "off the east coast of the South Island of New Zealand", + "165": "north of Macquarie Island", + "166": "Auckland Islands", + "167": "Macquarie Island", + "168": "south of New Zealand", + "169": "Samoa Islands vicinity", + "17": "south of Alaska", + "170": "Samoa Islands", + "171": "south of the Fiji Islands", + "172": "west of Tonga Islands", + "173": "Tonga", + "174": "Tonga vicinity", + "175": "south of Tonga", + "176": "north of New Zealand", + "177": "Kermadec Islands vicinity", + "178": "Kermadec Islands", + "179": "south of the Kermadec Islands", + "18": "southern Yukon Territory", + "180": "north of the Fiji Islands", + "181": "Fiji vicinity", + "182": "Fiji", + "183": "Santa Cruz Islands vicinity", + "184": "Santa Cruz Islands", + "185": "Vanuatu vicinity", + "186": "Vanuatu", + "187": "New Caledonia", + "188": "Loyalty Islands, New Caledonia", + "189": "southeast of the Loyalty Islands", + "19": "southeastern Alaska", + "190": "New Ireland", + "191": "north of the Solomon Islands", + "192": "New Britain", + "193": "Solomon Islands", + "194": "D'Entrecasteaux Islands", + "195": "south of the Solomon Islands", + "196": "Papua vicinity", + "197": "near the north coast of Papua", + "198": "Ninigo Islands", + "199": "Admiralty Islands", + "2": "southern Alaska", + "20": "off the coast of southeastern Alaska", + "200": "near the north coast of New Guinea", + "201": "Papua", + "202": "New Guinea", + "203": "Bismarck Sea", + "204": "Kepulauan Aru", + "205": "near the south coast of Papua", + "206": "near the south coast of New Guinea", + "207": "eastern New Guinea", + "208": "Arafura Sea", + "209": "Palau", + "21": "west of Vancouver Island", + "210": "south of the Mariana Islands", + "211": "southeast of Honshu", + "212": "Bonin Islands", + "213": "Volcano Islands", + "214": "west of the Mariana Islands", + "215": "Mariana Islands vicinity", + "216": "Mariana Islands", + "217": "Kamchatka Peninsula", + "218": "near the east coast of the Kamchatka Peninsula", + "219": "off the east coast of the Kamchatka Peninsula", + "22": "Haida Gwaii", + "220": "northwest of the Kuril Islands", + "221": "Kuril Islands", + "222": "east of the Kuril Islands", + "223": "eastern Sea of Japan", + "224": "Hokkaido", + "225": "off the southeast coast of Hokkaido", + "226": "near the west coast of Honshu", + "227": "eastern Honshu", + "228": "near the east coast of Honshu", + "229": "off the east coast of Honshu", + "23": "British Columbia", + "230": "near the south coast of eastern Honshu", + "231": "South Korea", + "232": "western Honshu", + "233": "near the south coast of western Honshu", + "234": "northwest of the Ryukyu Islands", + "235": "Kyushu", + "236": "Shikoku", + "237": "southeast of Shikoku", + "238": "Ryukyu Islands", + "239": "southeast of the Ryukyu Islands", + "24": "Alberta", + "240": "west of the Bonin Islands", + "241": "Philippine Sea", + "242": "near the coast of southeastern China", + "243": "Taiwan vicinity", + "244": "Taiwan", + "245": "northeast of Taiwan", + "246": "southwestern Ryukyu Islands", + "247": "southeast of Taiwan", + "248": "Philippine Islands", + "249": "Luzon, Philippines", + "25": "Vancouver Island", + "250": "Mindoro, Philippines", + "251": "Samar, Philippines", + "252": "Palawan, Philippines", + "253": "Sulu Sea", + "254": "Panay, Philippines", + "255": "Cebu, Philippines", + "256": "Leyte, Philippines", + "257": "Negros, Philippines", + "258": "Sulu Archipelago, Philippines", + "259": "Mindanao, Philippines", + "26": "off the coast of Washington", + "260": "east of the Philippine Islands", + "261": "Kalimantan", + "262": "Celebes Sea", + "263": "Pulau-Pulau Talaud", + "264": "north of Halmahera", + "265": "Minahasa, Sulawesi", + "266": "Molucca Sea", + "267": "Halmahera", + "268": "Sulawesi", + "269": "Pulau-Pulau Sula", + "27": "near the coast of Washington", + "270": "Ceram Sea", + "271": "Buru", + "272": "Seram", + "273": "southwest of Sumatra", + "274": "southern Sumatra", + "275": "Java Sea", + "276": "Sunda Strait", + "277": "Java", + "278": "Bali Sea", + "279": "Flores Sea", + "28": "Washington-Oregon border", + "280": "Banda Sea", + "281": "Pulau Pulau Tanimbar", + "282": "south of Java", + "283": "Bali", + "284": "south of Bali", + "285": "Sumbawa", + "286": "Flores", + "287": "Sumba", + "288": "Savu Sea", + "289": "Timor", + "29": "Washington", + "290": "Timor Sea", + "291": "south of Sumbawa", + "292": "south of Sumba", + "293": "south of Timor", + "294": "Myanmar-India border", + "295": "Myanmar-Bangladesh border", + "296": "Myanmar", + "297": "Myanmar-China border", + "298": "near the south coast of Myanmar", + "299": "Southeast Asia", + "3": "Bering Sea", + "30": "off the coast of Oregon", + "300": "Hainan, China", + "301": "South China Sea", + "302": "eastern Kashmir", + "303": "Kashmir-India border", + "304": "Kashmir-Xizang border", + "305": "western Xizang-India border", + "306": "Xizang, China", + "307": "Sichuan, China", + "308": "northern India", + "309": "Nepal-India border", + "31": "near the coast of Oregon", + "310": "Nepal", + "311": "Sikkim, India", + "312": "Bhutan", + "313": "eastern Xizang-India border", + "314": "southern India", + "315": "India-Bangladesh border", + "316": "Bangladesh", + "317": "northeastern India", + "318": "Yunnan, China", + "319": "Bay of Bengal", + "32": "Oregon", + "320": "Kyrgyzstan-Xinjiang border", + "321": "southern Xinjiang, China", + "322": "Gansu, China", + "323": "western Nei Mongol, China", + "324": "Kashmir-Xinjiang border", + "325": "Qinghai, China", + "326": "southwestern Siberia", + "327": "Lake Baykal", + "328": "east of Lake Baykal", + "329": "eastern Kazakhstan", + "33": "western Idaho", + "330": "Lake Issyk-Kul", + "331": "Kazakhstan-Xinjiang border", + "332": "northern Xinjiang, China", + "333": "Russia-Mongolia border", + "334": "Mongolia", + "335": "Ural Mountains", + "336": "western Kazakhstan", + "337": "eastern Caucasus", + "338": "Caspian Sea", + "339": "western Uzbekistan", + "34": "off the coast of northern California", + "340": "Turkmenistan", + "341": "Turkmenistan-Iran border", + "342": "Turkmenistan-Afghanistan border", + "343": "Turkey-Iran border", + "344": "Armenia-Azerbaijan-Iran border", + "345": "northwestern Iran", + "346": "Iran-Iraq border", + "347": "western Iran", + "348": "central Iran", + "349": "northwestern Afghanistan", + "35": "near the coast of northern California", + "350": "southwestern Afghanistan", + "351": "eastern Saudi Arabia", + "352": "Persian Gulf", + "353": "southern Iran", + "354": "southwestern Pakistan", + "355": "Gulf of Oman", + "356": "off the coast of Pakistan", + "357": "Ukraine-Moldova-southwestern Russia", + "358": "Romania", + "359": "Bulgaria", + "36": "northern California", + "360": "Black Sea", + "361": "Crimea", + "362": "northwestern Caucasus", + "363": "Greece-Bulgaria border", + "364": "Greece", + "365": "Aegean Sea", + "366": "eastern Turkey", + "367": "Georgia-Armenia-Turkey border", + "368": "southern Greece", + "369": "Dodecanese Islands, Greece", + "37": "Nevada", + "370": "Crete, Greece", + "371": "eastern Mediterranean Sea", + "372": "Cyprus", + "373": "Dead Sea", + "374": "Syria", + "375": "Iraq", + "376": "Portugal", + "377": "Spain", + "378": "Pyrenees", + "379": "near the south coast of France", + "38": "off the coast of California", + "380": "Corsica, France", + "381": "central Italy", + "382": "Adriatic Sea", + "383": "northwestern Balkan", + "384": "west of Gibraltar", + "385": "Strait of Gibraltar", + "386": "Balearic Islands, Spain", + "387": "western Mediterranean Sea", + "388": "Sardinia, Italy", + "389": "Tyrrhenian Sea", + "39": "central California", + "390": "southern Italy", + "391": "Albania", + "392": "Greece-Albania border", + "393": "Madeira Islands", + "394": "Canary Islands", + "395": "Morocco", + "396": "northern Algeria", + "397": "Tunisia", + "398": "Sicily, Italy", + "399": "Ionian Sea", + "4": "Komandorskiye Ostrova", + "40": "California-Nevada border", + "400": "central Mediterranean Sea", + "401": "near the coast of Libya", + "402": "North Atlantic Ocean", + "403": "northern Mid-Atlantic Ridge", + "404": "Azores Islands vicinity", + "405": "Azores Islands", + "406": "central Mid-Atlantic Ridge", + "407": "north of Ascension Island", + "408": "Ascension Island", + "409": "South Atlantic Ocean", + "41": "southern Nevada", + "410": "southern Mid-Atlantic Ridge", + "411": "Tristan da Cunha", + "412": "Bouvet Island", + "413": "southwest of Africa", + "414": "southeastern Atlantic Ocean", + "415": "eastern Gulf of Aden", + "416": "Socotra", + "417": "Arabian Sea", + "418": "Lakshadweep, India", + "419": "northeastern Somalia", + "42": "western Arizona", + "420": "North Indian Ocean", + "421": "Carlsberg Ridge", + "422": "Maldive Islands", + "423": "Laccadive Sea", + "424": "Sri Lanka", + "425": "South Indian Ocean", + "426": "Chagos Archipelago", + "427": "Mauritius - Reunion", + "428": "Southwest Indian Ridge", + "429": "Mid-Indian Ridge", + "43": "southern California", + "430": "south of Africa", + "431": "Prince Edward Islands", + "432": "Crozet Islands", + "433": "Kerguelen Islands", + "434": "Broken Ridge", + "435": "southeast Indian Ridge", + "436": "southern Kerguelen Plateau", + "437": "south of Australia", + "438": "Saskatchewan", + "439": "Manitoba", + "44": "California-Arizona border", + "440": "Hudson Bay", + "441": "Ontario", + "442": "Hudson Strait", + "443": "northern Quebec", + "444": "Davis Strait", + "445": "Labrador, Newfoundland and Labrador", + "446": "Labrador Sea", + "447": "southern Quebec", + "448": "Gaspe Peninsula, Quebec", + "449": "eastern Quebec", + "45": "California-Baja California border", + "450": "Anticosti Island, Quebec", + "451": "New Brunswick", + "452": "Nova Scotia", + "453": "Prince Edward Island", + "454": "Gulf of St. Lawrence", + "455": "Newfoundland, Newfoundland and Labrador", + "456": "Montana", + "457": "eastern Idaho", + "458": "Hebgen Lake", + "459": "Yellowstone, Wyoming", + "46": "western Arizona-Sonora border", + "460": "Wyoming", + "461": "North Dakota", + "462": "South Dakota", + "463": "Nebraska", + "464": "Minnesota", + "465": "Iowa", + "466": "Wisconsin", + "467": "Illinois", + "468": "Michigan", + "469": "Indiana", + "47": "off the west coast of Baja California", + "470": "southern Ontario", + "471": "Ohio", + "472": "New York", + "473": "Pennsylvania", + "474": "Vermont - New Hampshire", + "475": "Maine", + "476": "southern New England", + "477": "Gulf of Maine", + "478": "Utah", + "479": "Colorado", + "48": "Baja California", + "480": "Kansas", + "481": "Iowa-Missouri border", + "482": "Missouri-Kansas border", + "483": "Missouri", + "484": "Missouri-Arkansas border", + "485": "eastern Missouri", + "486": "southeastern Missouri", + "487": "Cape Girardeau, Missouri", + "488": "southern Illinois", + "489": "southern Indiana", + "49": "Gulf of California", + "490": "Kentucky", + "491": "West Virginia", + "492": "Virginia", + "493": "Chesapeake Bay", + "494": "New Jersey", + "495": "eastern Arizona", + "496": "New Mexico", + "497": "Texas Panhandle", + "498": "western Texas", + "499": "Oklahoma", + "5": "Near Islands, Aleutian Islands", + "50": "Sonora", + "500": "central Texas", + "501": "Arkansas-Oklahoma border", + "502": "Arkansas", + "503": "Louisiana-Texas border", + "504": "Louisiana", + "505": "Mississippi", + "506": "Tennessee", + "507": "Alabama", + "508": "western Florida", + "509": "Georgia, USA", + "51": "off the coast of central Mexico", + "510": "Florida-Georgia border", + "511": "South Carolina", + "512": "North Carolina", + "513": "off the east coast of the United States", + "514": "Florida Peninsula", + "515": "Bahama Islands", + "516": "eastern Arizona-Sonora border", + "517": "New Mexico-Chihuahua border", + "518": "Texas-Mexico border", + "519": "southern Texas", + "52": "near the coast of central Mexico", + "520": "near the coast of Texas", + "521": "Chihuahua, Mexico", + "522": "northern Mexico", + "523": "central Mexico", + "524": "Jalisco, Mexico", + "525": "Veracruz, Mexico", + "526": "Gulf of Mexico", + "527": "Bay of Campeche", + "528": "Brazil", + "529": "Guyana", + "53": "Revilla Gigedo Islands", + "530": "Suriname", + "531": "French Guiana", + "532": "Ireland", + "533": "United Kingdom", + "534": "North Sea", + "535": "southern Norway", + "536": "Sweden", + "537": "Baltic Sea", + "538": "France", + "539": "Bay of Biscay", + "54": "off the coast of Jalisco", + "540": "The Netherlands", + "541": "Belgium", + "542": "Denmark", + "543": "Germany", + "544": "Switzerland", + "545": "northern Italy", + "546": "Austria", + "547": "Czech and Slovak Republics", + "548": "Poland", + "549": "Hungary", + "55": "near the coast of Jalisco", + "550": "Northwest Africa", + "551": "southern Algeria", + "552": "Libya", + "553": "Egypt", + "554": "Red Sea", + "555": "western Saudi Arabia", + "556": "Chad", + "557": "Sudan", + "558": "Ethiopia", + "559": "western Gulf of Aden", + "56": "near the coast of Michoacan", + "560": "northwestern Somalia", + "561": "off the south coast of Northwest Africa", + "562": "Cameroon", + "563": "Equatorial Guinea", + "564": "Central African Republic", + "565": "Gabon", + "566": "Republic of the Congo", + "567": "Democratic Republic of the Congo", + "568": "Uganda", + "569": "Lake Victoria", + "57": "Michoacan", + "570": "Kenya", + "571": "southern Somalia", + "572": "Lake Tanganyika", + "573": "Tanzania", + "574": "northwest of Madagascar", + "575": "Angola", + "576": "Zambia", + "577": "Malawi", + "578": "Namibia", + "579": "Botswana", + "58": "near the coast of Guerrero", + "580": "Zimbabwe", + "581": "Mozambique", + "582": "Mozambique Channel", + "583": "Madagascar", + "584": "South Africa", + "585": "Lesotho", + "586": "Swaziland", + "587": "off the coast of South Africa", + "588": "northwest of Australia", + "589": "west of Australia", + "59": "Guerrero", + "590": "Western Australia", + "591": "Northern Territory", + "592": "South Australia", + "593": "Gulf of Carpentaria", + "594": "Queensland", + "595": "Coral Sea", + "596": "northwest of New Caledonia", + "597": "southwest of New Caledonia", + "598": "southwest of Australia", + "599": "off the south coast of Australia", + "6": "Rat Islands, Aleutian Islands", + "60": "Oaxaca", + "600": "near the coast of South Australia", + "601": "New South Wales", + "602": "Victoria, Australia", + "603": "near the southeast coast of Australia", + "604": "near the east coast of Australia", + "605": "east of Australia", + "606": "Norfolk Island", + "607": "northwest of New Zealand", + "608": "Bass Strait", + "609": "Tasmania", + "61": "Chiapas", + "610": "southeast of Australia", + "611": "North Pacific Ocean", + "612": "Hawaiian Islands", + "613": "Hawaii", + "614": "Federated States of Micronesia", + "615": "Marshall Islands", + "616": "Enewetak Atoll, Marshall Islands", + "617": "Bikini Atoll, Marshall Islands", + "618": "Gilbert Islands", + "619": "Johnston Island", + "62": "Mexico-Guatemala border", + "620": "Line Islands", + "621": "Palmyra Island", + "622": "Kiritimati", + "623": "Tuvalu", + "624": "Phoenix Islands", + "625": "Tokelau", + "626": "northern Cook Islands", + "627": "Cook Islands", + "628": "Society Islands, French Polynesia", + "629": "Tubuai Islands, French Polynesia", + "63": "off the coast of Mexico", + "630": "Marquesas Islands, French Polynesia", + "631": "Tuamotu Archipelago, French Polynesia", + "632": "South Pacific Ocean", + "633": "Lomonosov Ridge", + "634": "Arctic Ocean", + "635": "near the north coast of Greenland", + "636": "eastern Greenland", + "637": "Iceland vicinity", + "638": "Iceland", + "639": "Jan Mayen Island", + "64": "off the coast of Michoacan", + "640": "Greenland Sea", + "641": "north of Svalbard", + "642": "Norwegian Sea", + "643": "Svalbard", + "644": "north of Franz Josef Land", + "645": "Franz Josef Land", + "646": "northern Norway", + "647": "Barents Sea", + "648": "Novaya Zemlya", + "649": "Kara Sea", + "65": "off the coast of Guerrero", + "650": "near the coast of western Siberia", + "651": "north of Severnaya Zemlya", + "652": "Severnaya Zemlya", + "653": "near the coast of central Siberia", + "654": "east of Severnaya Zemlya", + "655": "Laptev Sea", + "656": "southeastern Siberia", + "657": "eastern Russia-northeastern China border", + "658": "northeastern China", + "659": "North Korea", + "66": "near the coast of Oaxaca", + "660": "Sea of Japan", + "661": "Primor'ye", + "662": "Sakhalin", + "663": "Sea of Okhotsk", + "664": "southeastern China", + "665": "Yellow Sea", + "666": "off the coast of eastern China", + "667": "north of the New Siberian Islands", + "668": "New Siberian Islands, Sakha", + "669": "east Siberian Sea", + "67": "off the coast of Oaxaca", + "670": "near the north coast of eastern Siberia", + "671": "eastern Siberia", + "672": "Chukchi Sea", + "673": "Bering Strait", + "674": "St. Lawrence Island", + "675": "Beaufort Sea", + "676": "northern Alaska", + "677": "northern Yukon Territory", + "678": "Queen Elizabeth Islands", + "679": "Northwest Territories-Nunavut", + "68": "off the coast of Chiapas", + "680": "western Greenland", + "681": "Baffin Bay", + "682": "Baffin Island, Nunavut", + "683": "southeast central Pacific Ocean", + "684": "southern East Pacific Rise", + "685": "Easter Island", + "686": "West Chile Rise", + "687": "Juan Fernandez Islands", + "688": "east of the North Island of New Zealand", + "689": "Chatham Islands", + "69": "near the coast of Chiapas", + "690": "south of the Chatham Islands", + "691": "Pacific-Antarctic Ridge", + "692": "southern Pacific Ocean", + "693": "east central Pacific Ocean", + "694": "central East Pacific Rise", + "695": "west of the Galápagos Islands", + "696": "Galápagos Islands vicinity", + "697": "Galápagos Islands", + "698": "southwest of the Galápagos Islands", + "699": "southeast of the Galápagos Islands", + "7": "Andreanof Islands, Aleutian Islands", + "70": "Guatemala", + "700": "south of Tasmania", + "701": "west of Macquarie Island", + "702": "Balleny Islands", + "703": "Andaman Islands", + "704": "Nicobar Islands", + "705": "off the west coast of northern Sumatra", + "706": "northern Sumatra", + "707": "Malay Peninsula, Malaysia", + "708": "Gulf of Thailand", + "709": "central Afghanistan", + "71": "near the coast of Guatemala", + "710": "Pakistan", + "711": "southwestern Kashmir", + "712": "India-Pakistan border", + "713": "central Kazakhstan", + "714": "eastern Uzbekistan", + "715": "Tajikistan", + "716": "Kyrgyzstan", + "717": "Afghanistan-Tajikistan border", + "718": "Hindu Kush, Afghanistan", + "719": "Tajikistan-Xinjiang border", + "72": "Honduras", + "720": "northwestern Kashmir", + "721": "Finland", + "722": "Norway-Russia border", + "723": "Finland-Russia border", + "724": "Baltics-Belarus-northwestern Russia", + "725": "northwestern Siberia", + "726": "northcentral Siberia", + "727": "Victoria Land, Antarctica", + "728": "Ross Sea", + "729": "Antarctica", + "73": "El Salvador", + "730": "northern East Pacific Rise", + "731": "north of Honduras", + "732": "east of the South Sandwich Islands", + "733": "Thailand", + "734": "Laos", + "735": "Cambodia", + "736": "Vietnam", + "737": "Gulf of Tongking", + "738": "Reykjanes Ridge", + "739": "Azores-Cape St. Vincent Ridge", + "74": "near the coast of Nicaragua", + "740": "Owen Fracture Zone", + "741": "Indian Ocean Triple Junction", + "742": "western Indian-Antarctic Ridge", + "743": "Western Sahara", + "744": "Mauritania", + "745": "Mali", + "746": "Senegal - Gambia", + "747": "Guinea", + "748": "Sierra Leone", + "749": "Liberia", + "75": "Nicaragua", + "750": "Cote d'Ivoire", + "751": "Burkina Faso", + "752": "Ghana", + "753": "Benin - Togo", + "754": "Niger", + "755": "Nigeria", + "756": "southeast of Easter Island", + "757": "Galápagos Triple Junction", + "76": "off the coast of Central America", + "77": "off the coast of Costa Rica", + "78": "Costa Rica", + "79": "north of Panama", + "8": "Pribilof Islands", + "80": "Panama-Costa Rica border", + "81": "Panama", + "82": "Panama-Colombia border", + "83": "south of Panama", + "84": "Yucatan Peninsula, Mexico", + "85": "Cuba", + "86": "Jamaica", + "87": "Haiti", + "88": "Dominican Republic", + "89": "Mona Passage", + "9": "Fox Islands, Aleutian Islands", + "90": "Puerto Rico", + "91": "Virgin Islands", + "92": "Leeward Islands", + "93": "Belize", + "94": "Caribbean Sea", + "95": "Windward Islands", + "96": "near the north coast of Colombia", + "97": "near the coast of Venezuela", + "98": "Trinidad", + "99": "northern Colombia", + "AU": "Australia", + "CA": "Canada", + "CL": "Chile", + "ES": "Spain", + "ID": "Indonesia", + "IN": "India", + "JP": "Japan", + "KG": "Kyrgyzstan", + "KI": "Kiribati", + "MacroregionFormat": "{1}, {0}", + "MX": "Mexico", + "NO": "Norway", + "NZ": "New Zealand", + "PG": "Papua New Guinea", + "PT": "Portugal", + "RU": "Russia", + "UA": "Ukraine", + "US": "United States", + "ZA": "South Africa" + } +} \ No newline at end of file diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.FERegion/und.json.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.FERegion/und.json.meta new file mode 100644 index 0000000..4094bae --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.FERegion/und.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: c46a56013a74d994aa93fbae1eccda88 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.FERegion/yue.json b/Assets/StreamingAssets/Messages/Cryville.EEW.FERegion/yue.json new file mode 100644 index 0000000..d6c5179 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.FERegion/yue.json @@ -0,0 +1,781 @@ +{ + "Culture": "yue-HK", + "Strings": { + "1": "阿拉斯加中部", + "10": "çƒå°¼é¦¬å…‹å³¶", + "100": "委內瑞拉馬拉開波湖", + "101": "委內瑞拉", + "102": "哥倫比亞西岸", + "103": "哥倫比亞", + "104": "厄瓜多爾近海", + "105": "厄瓜多爾沿岸", + "106": "哥倫比亞—厄瓜多爾邊境", + "107": "厄瓜多爾", + "108": "秘魯近海", + "109": "秘魯沿岸", + "11": "布里斯托爾ç£", + "110": "秘魯—厄瓜多爾邊境", + "111": "秘魯北部", + "112": "秘魯—巴西邊境", + "113": "巴西亞馬éœ", + "114": "秘魯中部近海", + "115": "秘魯中部沿岸", + "116": "秘魯中部", + "117": "秘魯å—部", + "118": "秘魯—玻利維亞邊境", + "119": "玻利維亞北部", + "12": "阿拉斯加åŠå³¶", + "120": "玻利維亞中部", + "121": "智利北部近海", + "122": "智利北部沿岸", + "123": "智利北部", + "124": "智利—玻利維亞邊境", + "125": "玻利維亞å—部", + "126": "巴拉圭", + "127": "智利—阿根廷邊境", + "128": "阿根廷胡胡伊çœ", + "129": "阿根廷薩爾塔çœ", + "13": "科迪亞克島", + "130": "阿根廷å¡å¡”馬å¡çœ", + "131": "阿根廷圖庫曼çœ", + "132": "阿根廷è–地牙哥迪埃斯特羅çœ", + "133": "阿根廷æ±åŒ—部", + "134": "智利中部近海", + "135": "智利中部沿岸", + "136": "智利中部", + "137": "阿根廷è–胡安çœ", + "138": "阿根廷拉里奧哈çœ", + "139": "阿根廷門多薩çœ", + "14": "基奈åŠå³¶", + "140": "阿根廷è–路易斯çœ", + "141": "阿根廷科多爾瓦çœ", + "142": "çƒæ‹‰åœ­", + "143": "智利å—部近海", + "144": "智利å—部", + "145": "智利—阿根廷邊境å—部", + "146": "阿根廷å—部", + "147": "ç«åœ°ç¾¤å³¶", + "148": "ç¦å…‹è˜­ç¾¤å³¶", + "149": "å¾·é›·å…‹æµ·å³½", + "15": "阿拉斯加ç£", + "150": "æ–¯ç§‘èˆæµ·", + "151": "å—使²»äºžå³¶", + "152": "å—使²»äºžæµ·å¶º", + "153": "å—æ¡‘å¨å¥‡ç¾¤å³¶", + "154": "å—æ³„蘭群島", + "155": "å—æ¥µåŠå³¶", + "156": "大西洋西å—部", + "157": "å¨å¾·çˆ¾æµ·", + "158": "新西蘭北島西岸近海", + "159": "新西蘭北島", + "16": "阿留申群島以å—", + "160": "新西蘭北島æ±å²¸è¿‘æµ·", + "161": "新西蘭å—島西岸近海", + "162": "新西蘭å—å³¶", + "163": "庫克海峽", + "164": "新西蘭å—å³¶æ±å²¸è¿‘æµ·", + "165": "麥覺ç†å³¶ä»¥åŒ—", + "166": "奧克蘭群島", + "167": "麥覺ç†å³¶", + "168": "新西蘭以å—", + "169": "薩摩亞群島附近", + "17": "阿拉斯加以å—", + "170": "薩摩亞群島", + "171": "æ–æ¿Ÿç¾¤å³¶ä»¥å—", + "172": "湯加群島以西", + "173": "湯加", + "174": "湯加附近", + "175": "湯加以å—", + "176": "新西蘭以北", + "177": "克馬德克群島附近", + "178": "克馬德克群島", + "179": "克馬德克群島以å—", + "18": "育空地å€å—部", + "180": "æ–æ¿Ÿç¾¤å³¶ä»¥åŒ—", + "181": "æ–æ¿Ÿé™„è¿‘", + "182": "æ–æ¿Ÿ", + "183": "è–克魯斯群島附近", + "184": "è–克魯斯群島", + "185": "溫ç´åœ–附近", + "186": "溫ç´åœ–", + "187": "新喀里多尼亞", + "188": "新喀里多尼亞洛亞蒂群島", + "189": "洛亞蒂群島æ±å—", + "19": "阿拉斯加æ±å—部", + "190": "新愛爾蘭", + "191": "所羅門群島以北", + "192": "æ–°ä¸åˆ—é¡›", + "193": "所羅門群島", + "194": "ç•¶ç‰¹çˆ¾å¡æ–¯æ‰˜ç¾¤å³¶", + "195": "所羅門群島以å—", + "196": "巴布亞附近", + "197": "巴布亞北岸", + "198": "尼尼戈群島", + "199": "阿德默勒爾蒂群島", + "2": "阿拉斯加å—部", + "20": "阿拉斯加æ±å—部近海", + "200": "新幾內亞北岸", + "201": "巴布亞", + "202": "新幾內亞", + "203": "俾斯麥海", + "204": "阿魯群島", + "205": "巴布亞å—岸", + "206": "新幾內亞å—岸", + "207": "新幾內亞æ±éƒ¨", + "208": "阿拉弗拉海", + "209": "帛ç‰", + "21": "温哥è¯å³¶ä»¥è¥¿", + "210": "馬里亞ç´ç¾¤å³¶ä»¥å—", + "211": "本州æ±å—", + "212": "å°ç¬ åŽŸç¾¤å³¶", + "213": "ç«å±±åˆ—å³¶", + "214": "馬里亞ç´ç¾¤å³¶ä»¥è¥¿", + "215": "馬里亞ç´ç¾¤å³¶é™„è¿‘", + "216": "馬里亞ç´ç¾¤å³¶", + "217": "勘察加åŠå³¶", + "218": "勘察加åŠå³¶æ±å²¸", + "219": "勘察加åŠå³¶æ±å²¸è¿‘æµ·", + "22": "æµ·é”瓜ä¾", + "220": "åƒå³¶ç¾¤å³¶è¥¿åŒ—", + "221": "åƒå³¶ç¾¤å³¶", + "222": "åƒå³¶ç¾¤å³¶ä»¥æ±", + "223": "日本海æ±éƒ¨", + "224": "北海é“", + "225": "åŒ—æµ·é“æ±å—岸近海", + "226": "本州西岸", + "227": "本州æ±éƒ¨", + "228": "本州æ±å²¸", + "229": "本州æ±å²¸è¿‘æµ·", + "23": "ä¸åˆ—顛哥倫比亞çœ", + "230": "本州æ±éƒ¨å—岸", + "231": "韓國", + "232": "本州西部", + "233": "本州西部å—岸", + "234": "ç‰çƒç¾¤å³¶è¥¿åŒ—", + "235": "ä¹å·ž", + "236": "四國", + "237": "四國æ±å—", + "238": "ç‰çƒç¾¤å³¶", + "239": "ç‰çƒç¾¤å³¶æ±å—", + "24": "亞伯é”çœ", + "240": "å°ç¬ åŽŸç¾¤å³¶ä»¥è¥¿", + "241": "è²å¾‹è³“æµ·", + "242": "中國æ±å—部沿岸", + "243": "臺ç£é™„è¿‘", + "244": "臺ç£", + "245": "è‡ºç£æ±åŒ—", + "246": "ç‰çƒç¾¤å³¶è¥¿å—部", + "247": "è‡ºç£æ±å—", + "248": "è²å¾‹è³“群島", + "249": "è²å¾‹è³“呂宋島", + "25": "温哥è¯å³¶", + "250": "è²å¾‹è³“民都洛島", + "251": "è²å¾‹è³“薩馬島", + "252": "è²å¾‹è³“巴拉望島", + "253": "蘇祿海", + "254": "è²å¾‹è³“ç­ä¹ƒå³¶", + "255": "è²å¾‹è³“宿霧", + "256": "è²å¾‹è³“èŠç‰¹å³¶", + "257": "è²å¾‹è³“內格羅斯島", + "258": "è²å¾‹è³“蘇祿群島", + "259": "è²å¾‹è³“棉蘭è€å³¶", + "26": "è¯ç››é “è¿‘æµ·", + "260": "è²å¾‹è³“群島以æ±", + "261": "加里曼丹", + "262": "西里伯斯海", + "263": "塔勞群島", + "264": "哈馬黑拉島以北", + "265": "蘇拉å¨è¥¿å³¶ç±³ç´å“ˆè–©", + "266": "馬魝夿µ·", + "267": "哈馬黑拉島", + "268": "蘇拉å¨è¥¿å³¶", + "269": "蘇拉群島", + "27": "è¯ç››é “沿岸", + "270": "塞蘭海", + "271": "布魯島", + "272": "斯蘭島", + "273": "蘇門答臘西å—", + "274": "蘇門答臘å—部", + "275": "爪哇海", + "276": "巽他海峽", + "277": "爪哇島", + "278": "峇里海", + "279": "弗洛勒斯海", + "28": "è¯ç››é “—俄勒岡邊境", + "280": "ç­é”æµ·", + "281": "塔寧巴爾群島", + "282": "爪哇以å—", + "283": "峇里島", + "284": "峇里以å—", + "285": "æ¾å·´å“‡å³¶", + "286": "弗洛勒斯島", + "287": "æ¾å·´å³¶", + "288": "薩武海", + "289": "叿±¶å³¶", + "29": "è¯ç››é “", + "290": "叿±¶æµ·", + "291": "æ¾å·´å“‡ä»¥å—", + "292": "æ¾å·´ä»¥å—", + "293": "叿±¶ä»¥å—", + "294": "緬甸—å°åº¦é‚Šå¢ƒ", + "295": "緬甸—孟加拉邊境", + "296": "緬甸", + "297": "緬甸—中國邊境", + "298": "緬甸å—岸", + "299": "æ±å—亞", + "3": "白令海", + "30": "俄勒岡近海", + "300": "中國海å—", + "301": "å—中國海", + "302": "克什米爾æ±éƒ¨", + "303": "克什米爾—å°åº¦é‚Šå¢ƒ", + "304": "克什米爾—西è—邊境", + "305": "西è—西部—å°åº¦é‚Šå¢ƒ", + "306": "中國西è—", + "307": "中國四å·", + "308": "å°åº¦åŒ—部", + "309": "尼泊爾—å°åº¦é‚Šå¢ƒ", + "31": "俄勒岡沿岸", + "310": "尼泊爾", + "311": "å°åº¦éŒ«é‡‘", + "312": "ä¸ä¸¹", + "313": "è¥¿è—æ±éƒ¨â€”å°åº¦é‚Šå¢ƒ", + "314": "å°åº¦å—部", + "315": "å°åº¦â€”孟加拉邊境", + "316": "孟加拉", + "317": "å°åº¦æ±åŒ—部", + "318": "中國雲å—", + "319": "孟加拉ç£", + "32": "俄勒岡", + "320": "å‰çˆ¾å‰æ–¯â€”新疆邊境", + "321": "中國新疆å—部", + "322": "中國甘肅", + "323": "中國內蒙å¤è¥¿éƒ¨", + "324": "克什米爾—新疆邊境", + "325": "ä¸­åœ‹é’æµ·", + "326": "西伯利亞西å—部", + "327": "è²åŠ çˆ¾æ¹–", + "328": "è²åŠ çˆ¾æ¹–ä»¥æ±", + "329": "哈薩克æ±éƒ¨", + "33": "æ„›é”è·è¥¿éƒ¨", + "330": "伊塞克湖", + "331": "哈薩克—新疆邊境", + "332": "中國新疆北部", + "333": "俄羅斯—蒙å¤é‚Šå¢ƒ", + "334": "è’™å¤", + "335": "çƒæ‹‰å±±è„ˆ", + "336": "哈薩克西部", + "337": "高加索æ±éƒ¨", + "338": "è£æµ·", + "339": "çƒèŒ²åˆ¥å…‹è¥¿éƒ¨", + "34": "加利ç¦å°¼äºžåŒ—部近海", + "340": "土庫曼", + "341": "土庫曼—伊朗邊境", + "342": "土庫曼—阿富汗邊境", + "343": "土耳其—伊朗邊境", + "344": "亞美尼亞—阿塞拜疆—伊朗邊境", + "345": "伊朗西北部", + "346": "伊朗—伊拉克邊境", + "347": "伊朗西部", + "348": "伊朗中部", + "349": "阿富汗西北部", + "35": "加利ç¦å°¼äºžåŒ—部沿岸", + "350": "阿富汗西å—部", + "351": "沙特阿拉伯æ±éƒ¨", + "352": "波斯ç£", + "353": "伊朗å—部", + "354": "巴基斯å¦è¥¿å—部", + "355": "阿曼ç£", + "356": "巴基斯å¦è¿‘æµ·", + "357": "çƒå…‹è˜­â€”摩爾多瓦—俄羅斯西å—部", + "358": "羅馬尼亞", + "359": "ä¿åŠ åˆ©äºž", + "36": "加利ç¦å°¼äºžåŒ—部", + "360": "黑海", + "361": "克里米亞", + "362": "高加索西北部", + "363": "希臘—ä¿åŠ åˆ©äºžé‚Šå¢ƒ", + "364": "希臘", + "365": "æ„›ç´æµ·", + "366": "土耳其æ±éƒ¨", + "367": "格魯å‰äºžâ€”亞美尼亞—土耳其邊境", + "368": "希臘å—部", + "369": "å¸Œè‡˜ä½æ¾¤å¡å°¼ç´¢æ–¯ç¾¤å³¶", + "37": "å…§è¯é”", + "370": "希臘克里特島", + "371": "地中海æ±éƒ¨", + "372": "塞浦路斯", + "373": "死海", + "374": "敘利亞", + "375": "伊拉克", + "376": "è‘¡è„牙", + "377": "西ç­ç‰™", + "378": "比利牛斯山", + "379": "法國å—岸", + "38": "加利ç¦å°¼äºžè¿‘æµ·", + "380": "法國科西嘉", + "381": "æ„大利中部", + "382": "亞得里亞海", + "383": "巴爾幹åŠå³¶è¥¿åŒ—部", + "384": "直布羅陀以西", + "385": "直布羅陀海峽", + "386": "西ç­ç‰™å·´åˆ©é˜¿é‡Œç¾¤å³¶", + "387": "地中海西部", + "388": "æ„大利撒ä¸", + "389": "第勒尼安海", + "39": "加利ç¦å°¼äºžä¸­éƒ¨", + "390": "æ„大利å—部", + "391": "阿爾巴尼亞", + "392": "希臘—阿爾巴尼亞邊境", + "393": "馬德拉群島", + "394": "加那利群島", + "395": "摩洛哥", + "396": "阿爾åŠåˆ©äºžåŒ—部", + "397": "çªå°¼æ–¯", + "398": "æ„大利西西里", + "399": "伊奧尼亞海", + "4": "科曼多爾群島", + "40": "加利ç¦å°¼äºžâ€”å…§è¯é”邊境", + "400": "地中海中部", + "401": "利比亞沿岸", + "402": "北大西洋", + "403": "大西洋洋中脊北部", + "404": "亞速爾群島附近", + "405": "亞速爾群島", + "406": "大西洋洋中脊中部", + "407": "阿森æ¾å³¶ä»¥åŒ—", + "408": "阿森æ¾å³¶", + "409": "å—大西洋", + "41": "å…§è¯é”å—部", + "410": "大西洋洋中脊å—部", + "411": "崔斯å¦â€”é”庫尼亞群島", + "412": "布韋島", + "413": "éžæ´²è¥¿å—", + "414": "大西洋æ±å—部", + "415": "亞ä¸ç£æ±éƒ¨", + "416": "索科特拉島", + "417": "阿拉伯海", + "418": "å°åº¦æ‹‰å…‹æ²™ç¾¤å³¶", + "419": "索馬里æ±åŒ—部", + "42": "亞利桑那西部", + "420": "北å°åº¦æ´‹", + "421": "嘉士伯海嶺", + "422": "馬爾代夫群島", + "423": "拉克代夫海", + "424": "斯里蘭å¡", + "425": "å—å°åº¦æ´‹", + "426": "查戈斯群島", + "427": "毛里裘斯—留尼旺", + "428": "西å—å°åº¦æ´‹æ´‹ä¸­è„Š", + "429": "中å°åº¦æ´‹æ´‹ä¸­è„Š", + "43": "加利ç¦å°¼äºžå—部", + "430": "éžæ´²ä»¥å—", + "431": "愛德è¯çŽ‹å­ç¾¤å³¶", + "432": "克羅澤群島", + "433": "凱爾蓋朗群島", + "434": "斷裂海嶺", + "435": "å°åº¦æ´‹æ´‹ä¸­è„Šæ±å—部", + "436": "凱爾蓋朗海å°å—部", + "437": "澳大利亞以å—", + "438": "沙斯å¡å¯¸æ—ºçœ", + "439": "緬尼åå·´çœ", + "44": "加利ç¦å°¼äºžâ€”亞利桑那邊境", + "440": "哈德éœç£", + "441": "安大略çœ", + "442": "å“ˆå¾—éœæµ·å³½", + "443": "é­åŒ—å…‹çœåŒ—部", + "444": "戴維斯海峽", + "445": "ç´èŠ¬è˜­èˆ‡æ‹‰å¸ƒæ‹‰å¤šçœæ‹‰å¸ƒæ‹‰å¤š", + "446": "拉布拉多海", + "447": "é­åŒ—å…‹çœå—部", + "448": "é­åŒ—å…‹çœåŠ æ–¯ä½©åŠå³¶", + "449": "é­åŒ—å…‹çœæ±éƒ¨", + "45": "加利ç¦å°¼äºžâ€”下加利ç¦å°¼äºžé‚Šå¢ƒ", + "450": "é­åŒ—å…‹çœå®‰è’‚科斯蒂島", + "451": "æ–°ä¸å€«ç‘žå…‹çœ", + "452": "新斯科èˆçœ", + "453": "愛德è¯çŽ‹å­å³¶çœ", + "454": "è–勞倫斯ç£", + "455": "ç´èŠ¬è˜­èˆ‡æ‹‰å¸ƒæ‹‰å¤šçœç´èŠ¬è˜­", + "456": "蒙大拿", + "457": "æ„›é”è·æ±éƒ¨", + "458": "希伯根湖", + "459": "懷俄明黃石", + "46": "亞利桑那—索諾拉邊境西部", + "460": "懷俄明", + "461": "北é”ç§‘ä»–", + "462": "å—é”ç§‘ä»–", + "463": "內布拉斯加", + "464": "明尼蘇é”", + "465": "æ„›è·è¯", + "466": "卿–¯åº·æ˜Ÿ", + "467": "伊利諾", + "468": "å¯†èŠæ ¹", + "469": "å°ç¬¬å®‰ç´", + "47": "下加利ç¦å°¼äºžè¥¿å²¸è¿‘æµ·", + "470": "安大略çœå—部", + "471": "俄亥俄", + "472": "ç´ç´„", + "473": "賓夕法尼亞", + "474": "佛蒙特—新罕布什爾", + "475": "緬因", + "476": "新英格蘭å—部", + "477": "緬因ç£", + "478": "猶他", + "479": "科羅拉多", + "48": "下加利ç¦å°¼äºž", + "480": "堪薩斯", + "481": "æ„›è·è¯â€”密蘇里邊境", + "482": "密蘇里—堪薩斯邊境", + "483": "密蘇里", + "484": "密蘇里—阿肯色邊境", + "485": "密蘇里æ±éƒ¨", + "486": "密蘇里æ±å—部", + "487": "å¯†è˜‡é‡Œé–‹æ™®å‰æ‹‰å¤š", + "488": "伊利諾å—部", + "489": "å°ç¬¬å®‰ç´å—部", + "49": "加利ç¦å°¼äºžç£", + "490": "肯塔基", + "491": "西維ç尼亞", + "492": "ç¶­ç尼亞", + "493": "切薩皮克ç£", + "494": "新澤西", + "495": "亞利桑那æ±éƒ¨", + "496": "新墨西哥", + "497": "德克薩斯狹長地帶", + "498": "德克薩斯西部", + "499": "俄克拉何馬", + "5": "阿留申群島尼爾群島", + "50": "索諾拉", + "500": "德克薩斯中部", + "501": "阿肯色—俄克拉何馬邊境", + "502": "阿肯色", + "503": "路易斯安那—德克薩斯邊境", + "504": "路易斯安那", + "505": "密西西比", + "506": "ç”°ç´è¥¿", + "507": "阿拉巴馬", + "508": "佛羅里é”西部", + "509": "ç¾Žåœ‹ä½æ²»äºž", + "51": "墨西哥中部近海", + "510": "佛羅里é”â€”ä½æ²»äºžé‚Šå¢ƒ", + "511": "å—å¡ç¾…來ç´", + "512": "北å¡ç¾…來ç´", + "513": "美國æ±å²¸è¿‘æµ·", + "514": "佛羅里é”åŠå³¶", + "515": "巴哈馬群島", + "516": "亞利桑那—索諾拉邊境æ±éƒ¨", + "517": "新墨西哥—èŠè¯è¯é‚Šå¢ƒ", + "518": "德克薩斯—墨西哥邊境", + "519": "å¾·å…‹è–©æ–¯å—部", + "52": "墨西哥中部沿岸", + "520": "德克薩斯沿岸", + "521": "墨西哥èŠè¯è¯", + "522": "墨西哥北部", + "523": "墨西哥中部", + "524": "墨西哥哈利斯科", + "525": "墨西哥韋拉克魯斯", + "526": "墨西哥ç£", + "527": "åŽä½©åˆ‡ç£", + "528": "巴西", + "529": "圭亞那", + "53": "雷維利亞希赫多群島", + "530": "蘇里å—", + "531": "法屬圭亞那", + "532": "愛爾蘭", + "533": "英國", + "534": "北海", + "535": "挪å¨å—部", + "536": "瑞典", + "537": "波羅的海", + "538": "法國", + "539": "比斯開ç£", + "54": "哈利斯科近海", + "540": "è·è˜­", + "541": "比利時", + "542": "丹麥", + "543": "德國", + "544": "瑞士", + "545": "æ„大利北部", + "546": "奧地利", + "547": "æ·å…‹å’Œæ–¯æ´›ä¼å…‹å…±å’Œåœ‹", + "548": "波蘭", + "549": "匈牙利", + "55": "哈利斯科沿岸", + "550": "西北éž", + "551": "阿爾åŠåˆ©äºžå—部", + "552": "利比亞", + "553": "埃åŠ", + "554": "ç´…æµ·", + "555": "沙特阿拉伯西部", + "556": "ä¹å¾—", + "557": "蘇丹", + "558": "埃塞俄比亞", + "559": "亞ä¸ç£è¥¿éƒ¨", + "56": "ç±³å»è‚¯æ²¿å²¸", + "560": "索馬里西北部", + "561": "西北éžå—岸近海", + "562": "喀麥隆", + "563": "赤é“幾內亞", + "564": "中éžå…±å’Œåœ‹", + "565": "加彭", + "566": "剛果共和國", + "567": "剛果民主共和國", + "568": "çƒå¹²é”", + "569": "維多利亞湖", + "57": "ç±³å»è‚¯", + "570": "肯尼亞", + "571": "索馬里å—部", + "572": "å¦å™¶å°¼å–€æ¹–", + "573": "妿¡‘尼亞", + "574": "馬é”加斯加西北", + "575": "安哥拉", + "576": "贊比亞", + "577": "馬拉維", + "578": "ç´ç±³æ¯”亞", + "579": "åšèŒ¨ç“¦ç´", + "58": "格雷羅沿岸", + "580": "津巴布韋", + "581": "莫桑比克", + "582": "莫桑比克海峽", + "583": "馬é”加斯加", + "584": "å—éž", + "585": "èŠç´¢æ‰˜", + "586": "æ–¯å¨å£«è˜­", + "587": "å—éžè¿‘æµ·", + "588": "澳大利亞西北", + "589": "澳大利亞以西", + "59": "格雷羅", + "590": "西澳大利亞", + "591": "北領地", + "592": "å—æ¾³å¤§åˆ©äºž", + "593": "å¡å¥”塔利亞ç£", + "594": "昆士蘭", + "595": "çŠç‘šæµ·", + "596": "新喀里多尼亞西北", + "597": "新喀里多尼亞西å—", + "598": "澳大利亞西å—", + "599": "澳大利亞å—岸近海", + "6": "阿留申群島拉特群島", + "60": "瓦哈å¡", + "600": "å—æ¾³å¤§åˆ©äºžæ²¿å²¸", + "601": "æ–°å—å¨çˆ¾æ–¯", + "602": "澳大利亞維多利亞", + "603": "澳大利亞æ±å—岸", + "604": "澳大利亞æ±å²¸", + "605": "澳大利亞以æ±", + "606": "諾ç¦å…‹å³¶", + "607": "新西蘭西北", + "608": "巴斯海峽", + "609": "塔斯馬尼亞", + "61": "æ°å¸•æ–¯", + "610": "澳大利亞æ±å—", + "611": "北太平洋", + "612": "å¤å¨å¤·ç¾¤å³¶", + "613": "å¤å¨å¤·", + "614": "密克羅尼西亞è¯é‚¦", + "615": "馬紹爾群島", + "616": "馬紹爾群島埃內韋塔克環ç¤", + "617": "馬紹爾群島比堅尼環ç¤", + "618": "å‰çˆ¾ä¼¯ç‰¹ç¾¤å³¶", + "619": "約翰斯頓環ç¤", + "62": "墨西哥—å±åœ°é¦¬æ‹‰é‚Šå¢ƒ", + "620": "èŠæ©ç¾¤å³¶", + "621": "巴爾米拉環ç¤", + "622": "è–誕島", + "623": "圖瓦盧", + "624": "鳳凰群島", + "625": "托克勞", + "626": "庫克群島北部", + "627": "庫克群島", + "628": "法屬波利尼西亞社會群島", + "629": "法屬波利尼西亞土布艾群島", + "63": "墨西哥近海", + "630": "法屬波利尼西亞馬克薩斯群島", + "631": "法屬波利尼西亞土阿莫土群島", + "632": "å—太平洋", + "633": "羅蒙諾索夫海嶺", + "634": "北冰洋", + "635": "格陵蘭島北岸", + "636": "格陵蘭島æ±éƒ¨", + "637": "冰島附近", + "638": "冰島", + "639": "央麥æ©å³¶", + "64": "ç±³å»è‚¯è¿‘æµ·", + "640": "格陵蘭海", + "641": "冷岸群島以北", + "642": "æŒªå¨æµ·", + "643": "冷岸群島", + "644": "弗蘭茲約瑟夫島群島以北", + "645": "弗蘭茲約瑟夫島群島", + "646": "挪å¨åŒ—部", + "647": "巴倫支海", + "648": "新地島", + "649": "喀拉海", + "65": "格雷羅近海", + "650": "西伯利亞西部沿岸", + "651": "北地群島以北", + "652": "北地群島", + "653": "西伯利亞中部沿岸", + "654": "北地群島以æ±", + "655": "拉普æ·å¤«æµ·", + "656": "西伯利亞æ±å—部", + "657": "ä¿„ç¾…æ–¯æ±éƒ¨â€”中國æ±åŒ—部邊境", + "658": "中國æ±åŒ—部", + "659": "æœé®®", + "66": "ç“¦å“ˆå¡æ²¿å²¸", + "660": "日本海", + "661": "濱海邊疆å€", + "662": "庫é å³¶", + "663": "é„‚éœæ¬¡å…‹æµ·", + "664": "中國æ±å—部", + "665": "黃海", + "666": "中國æ±éƒ¨è¿‘æµ·", + "667": "新西伯利亞群島以北", + "668": "新西伯利亞群島", + "669": "æ±è¥¿ä¼¯åˆ©äºžæµ·", + "67": "瓦哈å¡è¿‘æµ·", + "670": "æ±è¥¿ä¼¯åˆ©äºžåŒ—岸", + "671": "æ±è¥¿ä¼¯åˆ©äºž", + "672": "楚科奇海", + "673": "白令海峽", + "674": "è–勞倫斯島", + "675": "波弗特海", + "676": "阿拉斯加北部", + "677": "加拿大育空地å€åŒ—部", + "678": "伊利沙伯女皇群島", + "679": "西北地å€â€”努拿çƒç‰¹åœ°å€", + "68": "æ°å¸•斯近海", + "680": "格陵蘭島西部", + "681": "巴芬ç£", + "682": "åŠªç´æ­¦ç‰¹å·´èЬ島", + "683": "太平洋中部æ±å—部", + "684": "æ±å¤ªå¹³æ´‹æµ·éš†å—部", + "685": "復活節島", + "686": "智利海隆", + "687": "胡安·費爾å—德斯群島", + "688": "新西蘭北島以æ±", + "689": "查塔姆群島", + "69": "æ°å¸•斯沿岸", + "690": "查塔姆群島以å—", + "691": "å¤ªå¹³æ´‹â€”å—æ¥µæ´‹è„Š", + "692": "太平洋å—部", + "693": "太平洋中æ±éƒ¨", + "694": "æ±å¤ªå¹³æ´‹æµ·éš†ä¸­éƒ¨", + "695": "加拉帕戈斯群島以西", + "696": "加拉帕戈斯群島附近", + "697": "加拉帕戈斯群島", + "698": "加拉帕戈斯群島西å—部", + "699": "加拉帕戈斯群島æ±å—部", + "7": "阿留申群島安德烈亞諾夫群島", + "70": "å±åœ°é¦¬æ‹‰", + "700": "塔斯馬尼亞島以å—", + "701": "麥覺ç†ç¾¤å³¶ä»¥è¥¿", + "702": "巴列尼群島", + "703": "安锿›¼ç¾¤å³¶", + "704": "尼科巴群島", + "705": "蘇門答臘北部西岸近海", + "706": "蘇門答臘北部", + "707": "馬來西亞馬來åŠå³¶", + "708": "泰國ç£", + "709": "阿富汗中部", + "71": "å±åœ°é¦¬æ‹‰æ²¿å²¸", + "710": "巴基斯å¦", + "711": "克什米爾西å—部", + "712": "å°åº¦â€”巴基斯å¦é‚Šå¢ƒ", + "713": "哈薩克中部", + "714": "çƒèŒ²åˆ¥å…‹æ±éƒ¨", + "715": "å¡”å‰å…‹", + "716": "å‰çˆ¾å‰æ–¯", + "717": "阿富汗—塔å‰å…‹é‚Šå¢ƒ", + "718": "阿富汗興都庫什", + "719": "å¡”å‰å…‹â€”新疆邊境", + "72": "洪都拉斯", + "720": "克什米爾西北部", + "721": "芬蘭", + "722": "挪å¨â€”俄羅斯邊境", + "723": "芬蘭—俄羅斯邊境", + "724": "波羅的海國家—白俄羅斯—俄羅斯西北部", + "725": "西伯利亞西北部", + "726": "西伯利亞中北部", + "727": "å—æ¥µæ´²ç¶­å¤šåˆ©äºžåœ°", + "728": "羅斯海", + "729": "å—æ¥µæ´²", + "73": "薩爾瓦多", + "730": "æ±å¤ªå¹³æ´‹æµ·éš†åŒ—部", + "731": "洪都拉斯以北", + "732": "å—æ¡‘å¨å¥‡ç¾¤å³¶ä»¥æ±", + "733": "泰國", + "734": "è€æ’¾", + "735": "柬埔寨", + "736": "è¶Šå—", + "737": "北部ç£", + "738": "雷克雅內斯海嶺", + "739": "äºžé€Ÿçˆ¾ç¾¤å³¶â€”è–æ–‡æ£®ç‰¹è§’海嶺", + "74": "尼加拉瓜沿岸", + "740": "æ­æ–‡æ–·è£‚帶", + "741": "å°åº¦æ´‹ä¸‰å‰åŒ¯æŽ¥å€", + "742": "å°åº¦æ´‹â€”å—æ¥µæ´‹ä¸­è„Šè¥¿éƒ¨", + "743": "西撒哈拉", + "744": "毛里塔尼亞", + "745": "馬里", + "746": "塞內加爾—岡比亞", + "747": "幾內亞", + "748": "塞拉利昂", + "749": "利比里亞", + "75": "尼加拉瓜", + "750": "科特迪瓦", + "751": "å¸ƒåŸºç´æ³•ç´¢", + "752": "加ç´", + "753": "è²å¯§â€”多哥", + "754": "尼日爾", + "755": "尼日利亞", + "756": "復活節島æ±å—", + "757": "加拉帕戈斯三å‰åŒ¯æŽ¥å€", + "76": "中美洲近海", + "77": "哥斯é”黎加近海", + "78": "哥斯é”黎加", + "79": "巴拿馬以北", + "8": "普里比洛夫群島", + "80": "巴拿馬—哥斯é”黎加邊境", + "81": "巴拿馬", + "82": "巴拿馬—哥倫比亞邊境", + "83": "巴拿馬以å—", + "84": "墨西哥尤å¡å¦åŠå³¶", + "85": "å¤å·´", + "86": "牙買加", + "87": "海地", + "88": "多明尼加共和國", + "89": "èŽ«ç´æµ·å³½", + "9": "阿留申群島ç¦å…‹æ–¯ç¾¤å³¶", + "90": "波多黎å„", + "91": "處女群島", + "92": "背風群島", + "93": "伯利茲", + "94": "加勒比海", + "95": "å‘風群島", + "96": "哥倫比亞北岸", + "97": "委內瑞拉沿岸", + "98": "åƒé‡Œé”", + "99": "哥倫比亞北部", + "AU": "澳大利亞", + "CA": "加拿大", + "CL": "智利", + "ES": "西ç­ç‰™", + "ID": "å°åº¦å°¼è¥¿äºž", + "IN": "å°åº¦", + "JP": "日本", + "KG": "å‰çˆ¾å‰æ–¯", + "KI": "基里巴斯", + "MacroregionFormat": "{0}{1}", + "MX": "墨西哥", + "NO": "挪å¨", + "NZ": "新西蘭", + "PG": "巴布亞新畿內亞", + "PT": "è‘¡è„牙", + "RU": "ä¿„ç¾…æ–¯", + "UA": "çƒå…‹è˜­", + "US": "美國", + "ZA": "å—éž" + } +} \ No newline at end of file diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.FERegion/yue.json.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.FERegion/yue.json.meta new file mode 100644 index 0000000..051202b --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.FERegion/yue.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 83dc2372174fb224d96d96168700f3e5 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.FERegion/zh-Hant.json b/Assets/StreamingAssets/Messages/Cryville.EEW.FERegion/zh-Hant.json new file mode 100644 index 0000000..48e35b3 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.FERegion/zh-Hant.json @@ -0,0 +1,781 @@ +{ + "Culture": "zh-TW", + "Strings": { + "1": "阿拉斯加中部", + "10": "çƒå°¼é¦¬å…‹å³¶", + "100": "委內瑞拉馬拉開波湖", + "101": "委內瑞拉", + "102": "哥倫比亞西岸", + "103": "哥倫比亞", + "104": "厄瓜多近海", + "105": "厄瓜多沿岸", + "106": "哥倫比亞—厄瓜多邊境", + "107": "厄瓜多", + "108": "秘魯近海", + "109": "秘魯沿岸", + "11": "布里斯托爾ç£", + "110": "秘魯—厄瓜多邊境", + "111": "秘魯北部", + "112": "秘魯—巴西邊境", + "113": "巴西亞馬éœ", + "114": "秘魯中部近海", + "115": "秘魯中部沿岸", + "116": "秘魯中部", + "117": "秘魯å—部", + "118": "秘魯—玻利維亞邊境", + "119": "玻利維亞北部", + "12": "阿拉斯加åŠå³¶", + "120": "玻利維亞中部", + "121": "智利北部近海", + "122": "智利北部沿岸", + "123": "智利北部", + "124": "智利—玻利維亞邊境", + "125": "玻利維亞å—部", + "126": "巴拉圭", + "127": "智利—阿根廷邊境", + "128": "阿根廷胡胡伊çœ", + "129": "阿根廷薩爾塔çœ", + "13": "科迪亞克島", + "130": "阿根廷å¡å¡”馬å¡çœ", + "131": "阿根廷圖庫曼çœ", + "132": "阿根廷è–地牙哥德爾埃斯特çœ", + "133": "阿根廷æ±åŒ—部", + "134": "智利中部近海", + "135": "智利中部沿岸", + "136": "智利中部", + "137": "阿根廷è–胡安çœ", + "138": "阿根廷拉里奧哈çœ", + "139": "阿根廷門多薩çœ", + "14": "基奈åŠå³¶", + "140": "阿根廷è–路易斯çœ", + "141": "阿根廷科多爾瓦çœ", + "142": "çƒæ‹‰åœ­", + "143": "智利å—部近海", + "144": "智利å—部", + "145": "智利—阿根廷邊境å—部", + "146": "阿根廷å—部", + "147": "ç«åœ°ç¾¤å³¶", + "148": "ç¦å…‹è˜­ç¾¤å³¶", + "149": "å¾·é›·å…‹æµ·å³½", + "15": "阿拉斯加ç£", + "150": "æ–¯ç§‘èˆæµ·", + "151": "å—喬治亞島", + "152": "å—喬治亞海嶺", + "153": "å—æ¡‘å¨å¥‡ç¾¤å³¶", + "154": "å—æ˜”得蘭群島", + "155": "å—æ¥µåŠå³¶", + "156": "大西洋西å—部", + "157": "å¨å¾·çˆ¾æµ·", + "158": "ç´è¥¿è˜­åŒ—島西岸近海", + "159": "ç´è¥¿è˜­åŒ—å³¶", + "16": "阿留申群島以å—", + "160": "ç´è¥¿è˜­åŒ—å³¶æ±å²¸è¿‘æµ·", + "161": "ç´è¥¿è˜­å—島西岸近海", + "162": "ç´è¥¿è˜­å—å³¶", + "163": "庫克海峽", + "164": "ç´è¥¿è˜­å—å³¶æ±å²¸è¿‘æµ·", + "165": "麥覺ç†å³¶ä»¥åŒ—", + "166": "奧克蘭群島", + "167": "麥覺ç†å³¶", + "168": "ç´è¥¿è˜­ä»¥å—", + "169": "薩摩亞群島附近", + "17": "阿拉斯加以å—", + "170": "薩摩亞群島", + "171": "æ–æ¿Ÿç¾¤å³¶ä»¥å—", + "172": "æ±åŠ ç¾¤å³¶ä»¥è¥¿", + "173": "æ±åŠ ", + "174": "æ±åŠ é™„è¿‘", + "175": "æ±åР以å—", + "176": "ç´è¥¿è˜­ä»¥åŒ—", + "177": "克馬德克群島附近", + "178": "克馬德克群島", + "179": "克馬德克群島以å—", + "18": "育空地å€å—部", + "180": "æ–æ¿Ÿç¾¤å³¶ä»¥åŒ—", + "181": "æ–æ¿Ÿé™„è¿‘", + "182": "æ–æ¿Ÿ", + "183": "è–克魯斯群島附近", + "184": "è–克魯斯群島", + "185": "è¬é‚£æœé™„è¿‘", + "186": "è¬é‚£æœ", + "187": "新喀里多尼亞", + "188": "新喀里多尼亞羅雅æç¾¤å³¶", + "189": "ç¾…é›…æç¾¤å³¶æ±å—", + "19": "阿拉斯加æ±å—部", + "190": "新愛爾蘭", + "191": "索羅門群島以北", + "192": "æ–°ä¸åˆ—é¡›", + "193": "索羅門群島", + "194": "ç•¶ç‰¹çˆ¾å¡æ–¯æ‰˜ç¾¤å³¶", + "195": "索羅門群島以å—", + "196": "巴布亞附近", + "197": "巴布亞北岸", + "198": "尼尼戈群島", + "199": "阿德默勒爾蒂群島", + "2": "阿拉斯加å—部", + "20": "阿拉斯加æ±å—部近海", + "200": "新幾內亞北岸", + "201": "巴布亞", + "202": "新幾內亞", + "203": "俾斯麥海", + "204": "阿魯群島", + "205": "巴布亞å—岸", + "206": "新幾內亞å—岸", + "207": "新幾內亞æ±éƒ¨", + "208": "阿拉弗拉海", + "209": "帛ç‰", + "21": "溫哥è¯å³¶ä»¥è¥¿", + "210": "馬里亞ç´ç¾¤å³¶ä»¥å—", + "211": "本州æ±å—", + "212": "å°ç¬ åŽŸç¾¤å³¶", + "213": "ç«å±±åˆ—å³¶", + "214": "馬里亞ç´ç¾¤å³¶ä»¥è¥¿", + "215": "馬里亞ç´ç¾¤å³¶é™„è¿‘", + "216": "馬里亞ç´ç¾¤å³¶", + "217": "勘察加åŠå³¶", + "218": "勘察加åŠå³¶æ±å²¸", + "219": "勘察加åŠå³¶æ±å²¸è¿‘æµ·", + "22": "æµ·é”瓜ä¾", + "220": "åƒå³¶ç¾¤å³¶è¥¿åŒ—", + "221": "åƒå³¶ç¾¤å³¶", + "222": "åƒå³¶ç¾¤å³¶ä»¥æ±", + "223": "日本海æ±éƒ¨", + "224": "北海é“", + "225": "åŒ—æµ·é“æ±å—岸近海", + "226": "本州西岸", + "227": "本州æ±éƒ¨", + "228": "本州æ±å²¸", + "229": "本州æ±å²¸è¿‘æµ·", + "23": "ä¸åˆ—顛哥倫比亞çœ", + "230": "本州æ±éƒ¨å—岸", + "231": "韓國", + "232": "本州西部", + "233": "本州西部å—岸", + "234": "ç‰çƒç¾¤å³¶è¥¿åŒ—", + "235": "ä¹å·ž", + "236": "四國", + "237": "四國æ±å—", + "238": "ç‰çƒç¾¤å³¶", + "239": "ç‰çƒç¾¤å³¶æ±å—", + "24": "亞伯é”çœ", + "240": "å°ç¬ åŽŸç¾¤å³¶ä»¥è¥¿", + "241": "è²å¾‹è³“æµ·", + "242": "中國æ±å—部沿岸", + "243": "臺ç£é™„è¿‘", + "244": "臺ç£", + "245": "è‡ºç£æ±åŒ—", + "246": "ç‰çƒç¾¤å³¶è¥¿å—部", + "247": "è‡ºç£æ±å—", + "248": "è²å¾‹è³“群島", + "249": "è²å¾‹è³“呂宋島", + "25": "溫哥è¯å³¶", + "250": "è²å¾‹è³“民都洛島", + "251": "è²å¾‹è³“薩馬島", + "252": "è²å¾‹è³“巴拉望島", + "253": "蘇祿海", + "254": "è²å¾‹è³“ç­ä¹ƒå³¶", + "255": "è²å¾‹è³“宿霧", + "256": "è²å¾‹è³“èŠç‰¹å³¶", + "257": "è²å¾‹è³“內格羅斯島", + "258": "è²å¾‹è³“蘇祿群島", + "259": "è²å¾‹è³“民答那峨島", + "26": "è¯ç››é “è¿‘æµ·", + "260": "è²å¾‹è³“群島以æ±", + "261": "加里曼丹", + "262": "西里伯斯海", + "263": "塔勞群島", + "264": "哈馬黑拉島以北", + "265": "蘇拉å¨è¥¿å³¶ç±³ç´å“ˆè–©", + "266": "馬魝夿µ·", + "267": "哈馬黑拉島", + "268": "蘇拉å¨è¥¿å³¶", + "269": "蘇拉群島", + "27": "è¯ç››é “沿岸", + "270": "塞蘭海", + "271": "布魯島", + "272": "斯蘭島", + "273": "蘇門答臘西å—", + "274": "蘇門答臘å—部", + "275": "爪哇海", + "276": "巽他海峽", + "277": "爪哇島", + "278": "峇里海", + "279": "弗洛勒斯海", + "28": "è¯ç››é “—奧勒岡邊境", + "280": "ç­é”æµ·", + "281": "塔寧巴爾群島", + "282": "爪哇以å—", + "283": "峇里島", + "284": "峇里以å—", + "285": "æ¾å·´å“‡å³¶", + "286": "弗洛勒斯島", + "287": "æ¾å·´å³¶", + "288": "薩武海", + "289": "叿±¶å³¶", + "29": "è¯ç››é “", + "290": "叿±¶æµ·", + "291": "æ¾å·´å“‡ä»¥å—", + "292": "æ¾å·´ä»¥å—", + "293": "叿±¶ä»¥å—", + "294": "緬甸—å°åº¦é‚Šå¢ƒ", + "295": "緬甸—孟加拉邊境", + "296": "緬甸", + "297": "緬甸—中國邊境", + "298": "緬甸å—岸", + "299": "æ±å—亞", + "3": "白令海", + "30": "奧勒岡近海", + "300": "中國海å—", + "301": "å—中國海", + "302": "喀什米爾æ±éƒ¨", + "303": "喀什米爾—å°åº¦é‚Šå¢ƒ", + "304": "喀什米爾—西è—邊境", + "305": "西è—西部—å°åº¦é‚Šå¢ƒ", + "306": "中國西è—", + "307": "中國四å·", + "308": "å°åº¦åŒ—部", + "309": "尼泊爾—å°åº¦é‚Šå¢ƒ", + "31": "奧勒岡沿岸", + "310": "尼泊爾", + "311": "å°åº¦éŒ«é‡‘", + "312": "ä¸ä¸¹", + "313": "è¥¿è—æ±éƒ¨â€”å°åº¦é‚Šå¢ƒ", + "314": "å°åº¦å—部", + "315": "å°åº¦â€”孟加拉邊境", + "316": "孟加拉", + "317": "å°åº¦æ±åŒ—部", + "318": "中國雲å—", + "319": "孟加拉ç£", + "32": "奧勒岡", + "320": "å‰çˆ¾å‰æ–¯â€”新疆邊境", + "321": "中國新疆å—部", + "322": "中國甘肅", + "323": "中國內蒙å¤è¥¿éƒ¨", + "324": "喀什米爾—新疆邊境", + "325": "ä¸­åœ‹é’æµ·", + "326": "西伯利亞西å—部", + "327": "è²åŠ çˆ¾æ¹–", + "328": "è²åŠ çˆ¾æ¹–ä»¥æ±", + "329": "哈薩克æ±éƒ¨", + "33": "æ„›é”è·è¥¿éƒ¨", + "330": "伊塞克湖", + "331": "哈薩克—新疆邊境", + "332": "中國新疆北部", + "333": "俄羅斯—蒙å¤é‚Šå¢ƒ", + "334": "è’™å¤", + "335": "çƒæ‹‰å±±è„ˆ", + "336": "哈薩克西部", + "337": "高加索æ±éƒ¨", + "338": "裡海", + "339": "çƒèŒ²åˆ¥å…‹è¥¿éƒ¨", + "34": "加利ç¦å°¼äºžåŒ—部近海", + "340": "土庫曼", + "341": "土庫曼—伊朗邊境", + "342": "土庫曼—阿富汗邊境", + "343": "土耳其—伊朗邊境", + "344": "亞美尼亞—亞塞拜然—伊朗邊境", + "345": "伊朗西北部", + "346": "伊朗—伊拉克邊境", + "347": "伊朗西部", + "348": "伊朗中部", + "349": "阿富汗西北部", + "35": "加利ç¦å°¼äºžåŒ—部沿岸", + "350": "阿富汗西å—部", + "351": "æ²™çƒåœ°é˜¿æ‹‰ä¼¯æ±éƒ¨", + "352": "波斯ç£", + "353": "伊朗å—部", + "354": "巴基斯å¦è¥¿å—部", + "355": "阿曼ç£", + "356": "巴基斯å¦è¿‘æµ·", + "357": "çƒå…‹è˜­â€”摩爾多瓦—俄羅斯西å—部", + "358": "羅馬尼亞", + "359": "ä¿åŠ åˆ©äºž", + "36": "加利ç¦å°¼äºžåŒ—部", + "360": "黑海", + "361": "克里米亞", + "362": "高加索西北部", + "363": "希臘—ä¿åŠ åˆ©äºžé‚Šå¢ƒ", + "364": "希臘", + "365": "æ„›ç´æµ·", + "366": "土耳其æ±éƒ¨", + "367": "喬治亞—亞美尼亞—土耳其邊境", + "368": "希臘å—部", + "369": "å¸Œè‡˜ä½æ¾¤å¡å°¼ç´¢æ–¯ç¾¤å³¶", + "37": "å…§è¯é”", + "370": "希臘克里特島", + "371": "地中海æ±éƒ¨", + "372": "賽普勒斯", + "373": "死海", + "374": "敘利亞", + "375": "伊拉克", + "376": "è‘¡è„牙", + "377": "西ç­ç‰™", + "378": "庇里牛斯山", + "379": "法國å—岸", + "38": "加利ç¦å°¼äºžè¿‘æµ·", + "380": "法國科西嘉", + "381": "義大利中部", + "382": "亞得里亞海", + "383": "巴爾幹åŠå³¶è¥¿åŒ—部", + "384": "直布羅陀以西", + "385": "直布羅陀海峽", + "386": "西ç­ç‰™å·´åˆ©äºžåˆ©ç¾¤å³¶", + "387": "地中海西部", + "388": "義大利撒ä¸", + "389": "第勒尼安海", + "39": "加利ç¦å°¼äºžä¸­éƒ¨", + "390": "義大利å—部", + "391": "阿爾巴尼亞", + "392": "希臘—阿爾巴尼亞邊境", + "393": "馬德拉群島", + "394": "加那利群島", + "395": "摩洛哥", + "396": "阿爾åŠåˆ©äºžåŒ—部", + "397": "çªå°¼æ–¯", + "398": "義大利西西里", + "399": "伊奧尼亞海", + "4": "科曼多爾群島", + "40": "加利ç¦å°¼äºžâ€”å…§è¯é”邊境", + "400": "地中海中部", + "401": "利比亞沿岸", + "402": "北大西洋", + "403": "大西洋洋中脊北部", + "404": "亞速群島附近", + "405": "亞速群島", + "406": "大西洋洋中脊中部", + "407": "阿森æ¾å³¶ä»¥åŒ—", + "408": "阿森æ¾å³¶", + "409": "å—大西洋", + "41": "å…§è¯é”å—部", + "410": "大西洋洋中脊å—部", + "411": "崔斯å¦â€”é”庫尼亞群島", + "412": "布韋島", + "413": "éžæ´²è¥¿å—", + "414": "大西洋æ±å—部", + "415": "亞ä¸ç£æ±éƒ¨", + "416": "索科特拉島", + "417": "阿拉伯海", + "418": "å°åº¦æ‹‰å…‹æ²™ç¾¤å³¶", + "419": "索馬利亞æ±åŒ—部", + "42": "亞利桑那西部", + "420": "北å°åº¦æ´‹", + "421": "嘉士伯海嶺", + "422": "馬爾地夫群島", + "423": "拉克代夫海", + "424": "斯里蘭å¡", + "425": "å—å°åº¦æ´‹", + "426": "查戈斯群島", + "427": "模里西斯—留尼旺", + "428": "西å—å°åº¦æ´‹æ´‹ä¸­è„Š", + "429": "中å°åº¦æ´‹æ´‹ä¸­è„Š", + "43": "加利ç¦å°¼äºžå—部", + "430": "éžæ´²ä»¥å—", + "431": "愛德è¯çŽ‹å­ç¾¤å³¶", + "432": "克羅澤群島", + "433": "凱爾蓋朗群島", + "434": "斷裂海嶺", + "435": "å°åº¦æ´‹æ´‹ä¸­è„Šæ±å—部", + "436": "凱爾蓋朗海å°å—部", + "437": "澳大利亞以å—", + "438": "è–©å…‹å…¶è¬çœ", + "439": "曼尼托巴çœ", + "44": "加利ç¦å°¼äºžâ€”亞利桑那邊境", + "440": "哈德éœç£", + "441": "安大略çœ", + "442": "å“ˆå¾—éœæµ·å³½", + "443": "é­åŒ—å…‹çœåŒ—部", + "444": "戴維斯海峽", + "445": "ç´èŠ¬è˜­èˆ‡æ‹‰å¸ƒæ‹‰å¤šçœæ‹‰å¸ƒæ‹‰å¤š", + "446": "拉布拉多海", + "447": "é­åŒ—å…‹çœå—部", + "448": "é­åŒ—å…‹çœåŠ æ–¯ä½©åŠå³¶", + "449": "é­åŒ—å…‹çœæ±éƒ¨", + "45": "加利ç¦å°¼äºžâ€”下加利ç¦å°¼äºžé‚Šå¢ƒ", + "450": "é­åŒ—å…‹çœå®‰è’‚科斯蒂島", + "451": "æ–°ä¸å€«ç‘žå…‹çœ", + "452": "新斯科èˆçœ", + "453": "愛德è¯çŽ‹å­å³¶çœ", + "454": "è–勞倫斯ç£", + "455": "ç´èŠ¬è˜­èˆ‡æ‹‰å¸ƒæ‹‰å¤šçœç´èŠ¬è˜­", + "456": "蒙大拿", + "457": "æ„›é”è·æ±éƒ¨", + "458": "希伯根湖", + "459": "懷俄明黃石", + "46": "亞利桑那—索諾拉邊境西部", + "460": "懷俄明", + "461": "北é”ç§‘ä»–", + "462": "å—é”ç§‘ä»–", + "463": "內布拉斯加", + "464": "明尼蘇é”", + "465": "æ„›è·è¯", + "466": "卿–¯åº·è¾›", + "467": "伊利諾", + "468": "密西根", + "469": "å°ç¬¬å®‰ç´", + "47": "下加利ç¦å°¼äºžè¥¿å²¸è¿‘æµ·", + "470": "安大略çœå—部", + "471": "俄亥俄", + "472": "ç´ç´„", + "473": "賓夕法尼亞", + "474": "佛蒙特—新罕布å¤", + "475": "緬因", + "476": "新英格蘭å—部", + "477": "緬因ç£", + "478": "猶他", + "479": "科羅拉多", + "48": "下加利ç¦å°¼äºž", + "480": "堪薩斯", + "481": "æ„›è·è¯â€”密蘇里邊境", + "482": "密蘇里—堪薩斯邊境", + "483": "密蘇里", + "484": "密蘇里—阿肯色邊境", + "485": "密蘇里æ±éƒ¨", + "486": "密蘇里æ±å—部", + "487": "å¯†è˜‡é‡Œé–‹æ™®å‰æ‹‰å¤š", + "488": "伊利諾å—部", + "489": "å°ç¬¬å®‰ç´å—部", + "49": "加利ç¦å°¼äºžç£", + "490": "肯塔基", + "491": "西維å‰å°¼äºž", + "492": "ç¶­å‰å°¼äºž", + "493": "切薩皮克ç£", + "494": "ç´æ¾¤è¥¿", + "495": "亞利桑那æ±éƒ¨", + "496": "新墨西哥", + "497": "德克薩斯狹長地帶", + "498": "德克薩斯西部", + "499": "俄克拉何馬", + "5": "阿留申群島尼爾群島", + "50": "索諾拉", + "500": "德克薩斯中部", + "501": "阿肯色—俄克拉何馬邊境", + "502": "阿肯色", + "503": "路易斯安那—德克薩斯邊境", + "504": "路易斯安那", + "505": "密西西比", + "506": "ç”°ç´è¥¿", + "507": "阿拉巴馬", + "508": "佛羅里é”西部", + "509": "美國喬治亞", + "51": "墨西哥中部近海", + "510": "佛羅里é”—喬治亞邊境", + "511": "å—å¡ç¾…來ç´", + "512": "北å¡ç¾…來ç´", + "513": "美國æ±å²¸è¿‘æµ·", + "514": "佛羅里é”åŠå³¶", + "515": "巴哈馬群島", + "516": "亞利桑那—索諾拉邊境æ±éƒ¨", + "517": "新墨西哥—契瓦瓦邊境", + "518": "德克薩斯—墨西哥邊境", + "519": "å¾·å…‹è–©æ–¯å—部", + "52": "墨西哥中部沿岸", + "520": "德克薩斯沿岸", + "521": "墨西哥契瓦瓦", + "522": "墨西哥北部", + "523": "墨西哥中部", + "524": "墨西哥哈利斯科", + "525": "墨西哥韋拉克魯斯", + "526": "墨西哥ç£", + "527": "åŽä½©åˆ‡ç£", + "528": "巴西", + "529": "蓋亞那", + "53": "雷維利亞希赫多群島", + "530": "蘇利å—", + "531": "法屬圭亞那", + "532": "愛爾蘭", + "533": "英國", + "534": "北海", + "535": "挪å¨å—部", + "536": "瑞典", + "537": "波羅的海", + "538": "法國", + "539": "比斯開ç£", + "54": "哈利斯科近海", + "540": "è·è˜­", + "541": "比利時", + "542": "丹麥", + "543": "德國", + "544": "瑞士", + "545": "義大利北部", + "546": "奧地利", + "547": "æ·å…‹å’Œæ–¯æ´›ä¼å…‹å…±å’Œåœ‹", + "548": "波蘭", + "549": "匈牙利", + "55": "哈利斯科沿岸", + "550": "西北éž", + "551": "阿爾åŠåˆ©äºžå—部", + "552": "利比亞", + "553": "埃åŠ", + "554": "ç´…æµ·", + "555": "æ²™çƒåœ°é˜¿æ‹‰ä¼¯è¥¿éƒ¨", + "556": "查德", + "557": "蘇丹", + "558": "衣索比亞", + "559": "亞ä¸ç£è¥¿éƒ¨", + "56": "ç±³å»è‚¯æ²¿å²¸", + "560": "索馬利亞西北部", + "561": "西北éžå—岸近海", + "562": "喀麥隆", + "563": "赤é“幾內亞", + "564": "中éžå…±å’Œåœ‹", + "565": "加彭", + "566": "剛果共和國", + "567": "剛果民主共和國", + "568": "çƒå¹²é”", + "569": "維多利亞湖", + "57": "ç±³å»è‚¯", + "570": "肯亞", + "571": "索馬利亞å—部", + "572": "å¦å¹²ä¾å–€æ¹–", + "573": "å¦å°šå°¼äºž", + "574": "馬é”加斯加西北", + "575": "安哥拉", + "576": "尚比亞", + "577": "馬拉å¨", + "578": "ç´ç±³æ¯”亞", + "579": "波札那", + "58": "格雷羅沿岸", + "580": "辛巴å¨", + "581": "莫三比克", + "582": "莫三比克海峽", + "583": "馬é”加斯加", + "584": "å—éž", + "585": "賴索托", + "586": "å²ç“¦å¸å°¼", + "587": "å—éžè¿‘æµ·", + "588": "澳大利亞西北", + "589": "澳大利亞以西", + "59": "格雷羅", + "590": "西澳大利亞", + "591": "北領地", + "592": "å—æ¾³å¤§åˆ©äºž", + "593": "å¡å¥”塔利亞ç£", + "594": "昆士蘭", + "595": "çŠç‘šæµ·", + "596": "新喀里多尼亞西北", + "597": "新喀里多尼亞西å—", + "598": "澳大利亞西å—", + "599": "澳大利亞å—岸近海", + "6": "阿留申群島拉特群島", + "60": "瓦哈å¡", + "600": "å—æ¾³å¤§åˆ©äºžæ²¿å²¸", + "601": "æ–°å—å¨çˆ¾æ–¯", + "602": "澳大利亞維多利亞", + "603": "澳大利亞æ±å—岸", + "604": "澳大利亞æ±å²¸", + "605": "澳大利亞以æ±", + "606": "諾ç¦å…‹å³¶", + "607": "ç´è¥¿è˜­è¥¿åŒ—", + "608": "巴斯海峽", + "609": "塔斯馬尼亞", + "61": "æ°å¸•æ–¯", + "610": "澳大利亞æ±å—", + "611": "北太平洋", + "612": "å¤å¨å¤·ç¾¤å³¶", + "613": "å¤å¨å¤·", + "614": "密克羅尼西亞è¯é‚¦", + "615": "馬紹爾群島", + "616": "馬紹爾群島埃內韋塔克環ç¤", + "617": "馬紹爾群島比基尼環ç¤", + "618": "å‰çˆ¾ä¼¯ç‰¹ç¾¤å³¶", + "619": "約翰斯頓環ç¤", + "62": "墨西哥—瓜地馬拉邊境", + "620": "èŠæ©ç¾¤å³¶", + "621": "巴爾米拉環ç¤", + "622": "è–誕島", + "623": "å瓦魯", + "624": "鳳凰群島", + "625": "托克勞", + "626": "庫克群島北部", + "627": "庫克群島", + "628": "法屬玻里尼西亞社會群島", + "629": "法屬玻里尼西亞土布艾群島", + "63": "墨西哥近海", + "630": "法屬玻里尼西亞馬克薩斯群島", + "631": "法屬玻里尼西亞土阿莫土群島", + "632": "å—太平洋", + "633": "羅蒙諾索夫海嶺", + "634": "北冰洋", + "635": "格陵蘭島北岸", + "636": "格陵蘭島æ±éƒ¨", + "637": "冰島附近", + "638": "冰島", + "639": "央麥æ©å³¶", + "64": "ç±³å»è‚¯è¿‘æµ·", + "640": "格陵蘭海", + "641": "冷岸群島以北", + "642": "æŒªå¨æµ·", + "643": "斯瓦巴群島", + "644": "弗蘭茲約瑟夫島群島以北", + "645": "弗蘭茲約瑟夫島群島", + "646": "挪å¨åŒ—部", + "647": "巴倫支海", + "648": "新地島", + "649": "喀拉海", + "65": "格雷羅近海", + "650": "西伯利亞西部沿岸", + "651": "北地群島以北", + "652": "北地群島", + "653": "西伯利亞中部沿岸", + "654": "北地群島以æ±", + "655": "拉普æ·å¤«æµ·", + "656": "西伯利亞æ±å—部", + "657": "ä¿„ç¾…æ–¯æ±éƒ¨â€”中國æ±åŒ—部邊境", + "658": "中國æ±åŒ—部", + "659": "æœé®®", + "66": "ç“¦å“ˆå¡æ²¿å²¸", + "660": "日本海", + "661": "濱海邊疆å€", + "662": "庫é å³¶", + "663": "é„‚éœæ¬¡å…‹æµ·", + "664": "中國æ±å—部", + "665": "黃海", + "666": "中國æ±éƒ¨è¿‘æµ·", + "667": "新西伯利亞群島以北", + "668": "新西伯利亞群島", + "669": "æ±è¥¿ä¼¯åˆ©äºžæµ·", + "67": "瓦哈å¡è¿‘æµ·", + "670": "æ±è¥¿ä¼¯åˆ©äºžåŒ—岸", + "671": "æ±è¥¿ä¼¯åˆ©äºž", + "672": "楚科奇海", + "673": "白令海峽", + "674": "è–勞倫斯島", + "675": "波弗特海", + "676": "阿拉斯加北部", + "677": "加拿大育空地å€åŒ—部", + "678": "伊莉莎白女王群島", + "679": "西北地å€â€”努ç´ç¦ç‰¹åœ°å€", + "68": "æ°å¸•斯近海", + "680": "格陵蘭島西部", + "681": "巴芬ç£", + "682": "åŠªç´æ­¦ç‰¹å·´èЬ島", + "683": "太平洋中部æ±å—部", + "684": "æ±å¤ªå¹³æ´‹æµ·éš†å—部", + "685": "復活節島", + "686": "智利海隆", + "687": "胡安·費爾å—德斯群島", + "688": "ç´è¥¿è˜­åŒ—島以æ±", + "689": "查塔姆群島", + "69": "æ°å¸•斯沿岸", + "690": "查塔姆群島以å—", + "691": "å¤ªå¹³æ´‹â€”å—æ¥µæ´‹è„Š", + "692": "太平洋å—部", + "693": "太平洋中æ±éƒ¨", + "694": "æ±å¤ªå¹³æ´‹æµ·éš†ä¸­éƒ¨", + "695": "加拉帕戈斯群島以西", + "696": "加拉帕戈斯群島附近", + "697": "加拉帕戈斯群島", + "698": "加拉帕戈斯群島西å—部", + "699": "加拉帕戈斯群島æ±å—部", + "7": "阿留申群島安德烈亞諾夫群島", + "70": "瓜地馬拉", + "700": "塔斯馬尼亞島以å—", + "701": "麥覺ç†ç¾¤å³¶ä»¥è¥¿", + "702": "巴列尼群島", + "703": "安锿›¼ç¾¤å³¶", + "704": "尼科巴群島", + "705": "蘇門答臘北部西岸近海", + "706": "蘇門答臘北部", + "707": "馬來西亞馬來åŠå³¶", + "708": "泰國ç£", + "709": "阿富汗中部", + "71": "瓜地馬拉沿岸", + "710": "巴基斯å¦", + "711": "喀什米爾西å—部", + "712": "å°åº¦â€”巴基斯å¦é‚Šå¢ƒ", + "713": "哈薩克中部", + "714": "çƒèŒ²åˆ¥å…‹æ±éƒ¨", + "715": "å¡”å‰å…‹", + "716": "å‰çˆ¾å‰æ–¯", + "717": "阿富汗—塔å‰å…‹é‚Šå¢ƒ", + "718": "阿富汗興都庫什", + "719": "å¡”å‰å…‹â€”新疆邊境", + "72": "å®éƒ½æ‹‰æ–¯", + "720": "喀什米爾西北部", + "721": "芬蘭", + "722": "挪å¨â€”俄羅斯邊境", + "723": "芬蘭—俄羅斯邊境", + "724": "波羅的海國家—白俄羅斯—俄羅斯西北部", + "725": "西伯利亞西北部", + "726": "西伯利亞中北部", + "727": "å—æ¥µæ´²ç¶­å¤šåˆ©äºžåœ°", + "728": "羅斯海", + "729": "å—æ¥µæ´²", + "73": "薩爾瓦多", + "730": "æ±å¤ªå¹³æ´‹æµ·éš†åŒ—部", + "731": "å®éƒ½æ‹‰æ–¯ä»¥åŒ—", + "732": "å—æ¡‘å¨å¥‡ç¾¤å³¶ä»¥æ±", + "733": "泰國", + "734": "寮國", + "735": "柬埔寨", + "736": "è¶Šå—", + "737": "æ±äº¬ç£", + "738": "雷克雅內斯海嶺", + "739": "äºžé€Ÿç¾¤å³¶â€”è–æ–‡æ£®ç‰¹è§’海嶺", + "74": "尼加拉瓜沿岸", + "740": "æ­æ–‡æ–·è£‚帶", + "741": "å°åº¦æ´‹ä¸‰å‰åŒ¯æŽ¥å€", + "742": "å°åº¦æ´‹â€”å—æ¥µæ´‹ä¸­è„Šè¥¿éƒ¨", + "743": "西撒哈拉", + "744": "茅利塔尼亞", + "745": "馬里", + "746": "塞內加爾—甘比亞", + "747": "幾內亞", + "748": "ç…å­å±±", + "749": "賴比瑞亞", + "75": "尼加拉瓜", + "750": "象牙海岸", + "751": "布å‰ç´æ³•ç´¢", + "752": "迦ç´", + "753": "è²å——多哥", + "754": "尼日", + "755": "奈åŠåˆ©äºž", + "756": "復活節島æ±å—", + "757": "加拉帕戈斯三å‰åŒ¯æŽ¥å€", + "76": "中美洲近海", + "77": "哥斯大黎加近海", + "78": "哥斯大黎加", + "79": "巴拿馬以北", + "8": "普里比洛夫群島", + "80": "巴拿馬—哥斯大黎加邊境", + "81": "巴拿馬", + "82": "巴拿馬—哥倫比亞邊境", + "83": "巴拿馬以å—", + "84": "墨西哥犹加敦åŠå³¶", + "85": "å¤å·´", + "86": "牙買加", + "87": "海地", + "88": "多明尼加共和國", + "89": "èŽ«ç´æµ·å³½", + "9": "阿留申群島ç¦å…‹æ–¯ç¾¤å³¶", + "90": "波多黎å„", + "91": "維京群島", + "92": "背風群島", + "93": "è²é‡Œæ–¯", + "94": "加勒比海", + "95": "å‘風群島", + "96": "哥倫比亞北岸", + "97": "委內瑞拉沿岸", + "98": "åƒé‡Œé”", + "99": "哥倫比亞北部", + "AU": "澳大利亞", + "CA": "加拿大", + "CL": "智利", + "ES": "西ç­ç‰™", + "ID": "å°åº¦å°¼è¥¿äºž", + "IN": "å°åº¦", + "JP": "日本", + "KG": "å‰çˆ¾å‰æ–¯", + "KI": "å‰é‡Œå·´æ–¯", + "MacroregionFormat": "{0}{1}", + "MX": "墨西哥", + "NO": "挪å¨", + "NZ": "ç´è¥¿è˜­", + "PG": "巴布亞ç´å¹¾å…§äºž", + "PT": "è‘¡è„牙", + "RU": "ä¿„ç¾…æ–¯", + "UA": "çƒå…‹è˜­", + "US": "美國", + "ZA": "å—éž" + } +} \ No newline at end of file diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.FERegion/zh-Hant.json.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.FERegion/zh-Hant.json.meta new file mode 100644 index 0000000..68aefcb --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.FERegion/zh-Hant.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 4e7ec40d2585e914aa28ad75195613ae +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.FERegion/zh.json b/Assets/StreamingAssets/Messages/Cryville.EEW.FERegion/zh.json new file mode 100644 index 0000000..e5f2501 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.FERegion/zh.json @@ -0,0 +1,781 @@ +{ + "Culture": "zh-CN", + "Strings": { + "1": "阿拉斯加中部", + "10": "乌尼马克岛", + "100": "委内瑞拉马拉开波湖", + "101": "委内瑞拉", + "102": "哥伦比亚西岸", + "103": "哥伦比亚", + "104": "厄瓜多尔近海", + "105": "厄瓜多尔沿岸", + "106": "哥伦比亚—厄瓜多尔边境", + "107": "厄瓜多尔", + "108": "秘é²è¿‘æµ·", + "109": "ç§˜é²æ²¿å²¸", + "11": "布里斯托尔湾", + "110": "秘é²â€”厄瓜多尔边境", + "111": "秘é²åŒ—部", + "112": "秘é²â€”巴西边境", + "113": "巴西亚马孙", + "114": "秘é²ä¸­éƒ¨è¿‘æµ·", + "115": "秘é²ä¸­éƒ¨æ²¿å²¸", + "116": "秘é²ä¸­éƒ¨", + "117": "秘é²å—部", + "118": "秘é²â€”玻利维亚边境", + "119": "玻利维亚北部", + "12": "阿拉斯加åŠå²›", + "120": "玻利维亚中部", + "121": "智利北部近海", + "122": "智利北部沿岸", + "123": "智利北部", + "124": "智利—玻利维亚边境", + "125": "玻利维亚å—部", + "126": "巴拉圭", + "127": "智利—阿根廷边境", + "128": "阿根廷胡胡伊çœ", + "129": "阿根廷è¨å°”å¡”çœ", + "13": "科迪亚克岛", + "130": "阿根廷å¡å¡”马å¡çœ", + "131": "阿根廷图库曼çœ", + "132": "阿根廷圣地亚哥德尔埃斯特çœ", + "133": "阿根廷东北部", + "134": "智利中部近海", + "135": "智利中部沿岸", + "136": "智利中部", + "137": "阿根廷圣胡安çœ", + "138": "阿根廷拉里奥哈çœ", + "139": "阿根廷门多è¨çœ", + "14": "基奈åŠå²›", + "140": "阿根廷圣路易斯çœ", + "141": "阿根廷科多尔瓦çœ", + "142": "乌拉圭", + "143": "智利å—部近海", + "144": "智利å—部", + "145": "智利—阿根廷边境å—部", + "146": "阿根廷å—部", + "147": "ç«åœ°ç¾¤å²›", + "148": "ç¦å…‹å…°ç¾¤å²›", + "149": "德雷克海峡", + "15": "阿拉斯加湾", + "150": "æ–¯ç§‘èˆæµ·", + "151": "å—乔治亚岛", + "152": "å—乔治亚海岭", + "153": "å—æ¡‘å¨å¥‡ç¾¤å²›", + "154": "å—设得兰群岛", + "155": "å—æžåŠå²›", + "156": "大西洋西å—部", + "157": "å¨å¾·å°”æµ·", + "158": "新西兰北岛西岸近海", + "159": "新西兰北岛", + "16": "阿留申群岛以å—", + "160": "新西兰北岛东岸近海", + "161": "新西兰å—岛西岸近海", + "162": "新西兰å—å²›", + "163": "库克海峡", + "164": "新西兰å—岛东岸近海", + "165": "麦夸里岛以北", + "166": "奥克兰群岛", + "167": "麦夸里岛", + "168": "新西兰以å—", + "169": "è¨æ‘©äºšç¾¤å²›é™„è¿‘", + "17": "阿拉斯加以å—", + "170": "è¨æ‘©äºšç¾¤å²›", + "171": "æ–æµŽç¾¤å²›ä»¥å—", + "172": "汤加群岛以西", + "173": "汤加", + "174": "汤加附近", + "175": "汤加以å—", + "176": "新西兰以北", + "177": "克马德克群岛附近", + "178": "克马德克群岛", + "179": "克马德克群岛以å—", + "18": "育空地区å—部", + "180": "æ–æµŽç¾¤å²›ä»¥åŒ—", + "181": "æ–æµŽé™„è¿‘", + "182": "æ–æµŽ", + "183": "åœ£å…‹é²æ–¯ç¾¤å²›é™„è¿‘", + "184": "åœ£å…‹é²æ–¯ç¾¤å²›", + "185": "瓦努阿图附近", + "186": "瓦努阿图", + "187": "新喀里多尼亚", + "188": "新喀里多尼亚洛亚蒂群岛", + "189": "洛亚蒂群岛东å—", + "19": "阿拉斯加东å—部", + "190": "新爱尔兰", + "191": "所罗门群岛以北", + "192": "æ–°ä¸åˆ—颠", + "193": "所罗门群岛", + "194": "å½“ç‰¹å°”å¡æ–¯æ‰˜ç¾¤å²›", + "195": "所罗门群岛以å—", + "196": "巴布亚附近", + "197": "巴布亚北岸", + "198": "尼尼戈群岛", + "199": "阿德默勒尔蒂群岛", + "2": "阿拉斯加å—部", + "20": "阿拉斯加东å—部近海", + "200": "新几内亚北岸", + "201": "巴布亚", + "202": "新几内亚", + "203": "俾斯麦海", + "204": "阿é²ç¾¤å²›", + "205": "巴布亚å—岸", + "206": "新几内亚å—岸", + "207": "新几内亚东部", + "208": "阿拉弗拉海", + "209": "帕劳", + "21": "温哥åŽå²›ä»¥è¥¿", + "210": "马里亚纳群岛以å—", + "211": "本州东å—", + "212": "å°ç¬ åŽŸç¾¤å²›", + "213": "ç«å±±åˆ—å²›", + "214": "马里亚纳群岛以西", + "215": "马里亚纳群岛附近", + "216": "马里亚纳群岛", + "217": "勘察加åŠå²›", + "218": "勘察加åŠå²›ä¸œå²¸", + "219": "勘察加åŠå²›ä¸œå²¸è¿‘æµ·", + "22": "海达瓜ä¾", + "220": "åƒå²›ç¾¤å²›è¥¿åŒ—", + "221": "åƒå²›ç¾¤å²›", + "222": "åƒå²›ç¾¤å²›ä»¥ä¸œ", + "223": "日本海东部", + "224": "北海é“", + "225": "北海é“东å—岸近海", + "226": "本州西岸", + "227": "本州东部", + "228": "本州东岸", + "229": "本州东岸近海", + "23": "ä¸åˆ—颠哥伦比亚çœ", + "230": "本州东部å—岸", + "231": "韩国", + "232": "本州西部", + "233": "本州西部å—岸", + "234": "ç‰çƒç¾¤å²›è¥¿åŒ—", + "235": "ä¹å·ž", + "236": "四国", + "237": "四国东å—", + "238": "ç‰çƒç¾¤å²›", + "239": "ç‰çƒç¾¤å²›ä¸œå—", + "24": "艾伯塔çœ", + "240": "å°ç¬ åŽŸç¾¤å²›ä»¥è¥¿", + "241": "è²å¾‹å®¾æµ·", + "242": "中国东å—部沿岸", + "243": "å°æ¹¾é™„è¿‘", + "244": "å°æ¹¾", + "245": "å°æ¹¾ä¸œåŒ—", + "246": "ç‰çƒç¾¤å²›è¥¿å—部", + "247": "å°æ¹¾ä¸œå—", + "248": "è²å¾‹å®¾ç¾¤å²›", + "249": "è²å¾‹å®¾å•宋岛", + "25": "温哥åŽå²›", + "250": "è²å¾‹å®¾æ°‘都洛岛", + "251": "è²å¾‹å®¾è¨é©¬å²›", + "252": "è²å¾‹å®¾å·´æ‹‰æœ›å²›", + "253": "è‹ç¦„æµ·", + "254": "è²å¾‹å®¾ç­ä¹ƒå²›", + "255": "è²å¾‹å®¾å®¿é›¾", + "256": "è²å¾‹å®¾èŽ±ç‰¹å²›", + "257": "è²å¾‹å®¾å†…格罗斯岛", + "258": "è²å¾‹å®¾è‹ç¦„群岛", + "259": "è²å¾‹å®¾æ£‰å…°è€å²›", + "26": "åŽç››é¡¿è¿‘æµ·", + "260": "è²å¾‹å®¾ç¾¤å²›ä»¥ä¸œ", + "261": "加里曼丹", + "262": "西里伯斯海", + "263": "塔劳群岛", + "264": "哈马黑拉岛以北", + "265": "è‹æ‹‰å¨è¥¿å²›ç±³çº³å“ˆè¨", + "266": "马é²å¤æµ·", + "267": "哈马黑拉岛", + "268": "è‹æ‹‰å¨è¥¿å²›", + "269": "è‹æ‹‰ç¾¤å²›", + "27": "åŽç››é¡¿æ²¿å²¸", + "270": "塞兰海", + "271": "布é²å²›", + "272": "斯兰岛", + "273": "è‹é—¨ç­”腊西å—", + "274": "è‹é—¨ç­”è…Šå—部", + "275": "爪哇海", + "276": "巽他海峡", + "277": "爪哇岛", + "278": "巴厘海", + "279": "弗洛勒斯海", + "28": "åŽç››é¡¿â€”俄勒冈边境", + "280": "ç­è¾¾æµ·", + "281": "å¡”å®å·´å°”群岛", + "282": "爪哇以å—", + "283": "巴厘岛", + "284": "巴厘以å—", + "285": "æ¾å·´å“‡å²›", + "286": "弗洛勒斯岛", + "287": "æ¾å·´å²›", + "288": "è¨æ­¦æµ·", + "289": "叿±¶å²›", + "29": "åŽç››é¡¿", + "290": "叿±¶æµ·", + "291": "æ¾å·´å“‡ä»¥å—", + "292": "æ¾å·´ä»¥å—", + "293": "叿±¶ä»¥å—", + "294": "缅甸—å°åº¦è¾¹å¢ƒ", + "295": "缅甸—孟加拉国边境", + "296": "缅甸", + "297": "缅甸—中国边境", + "298": "缅甸å—岸", + "299": "东å—亚", + "3": "白令海", + "30": "俄勒冈近海", + "300": "中国海å—", + "301": "å—中国海", + "302": "克什米尔东部", + "303": "克什米尔—å°åº¦è¾¹å¢ƒ", + "304": "克什米尔—西è—边境", + "305": "西è—西部—å°åº¦è¾¹å¢ƒ", + "306": "中国西è—", + "307": "中国四å·", + "308": "å°åº¦åŒ—部", + "309": "尼泊尔—å°åº¦è¾¹å¢ƒ", + "31": "俄勒冈沿岸", + "310": "尼泊尔", + "311": "å°åº¦é”¡é‡‘", + "312": "ä¸ä¸¹", + "313": "西è—东部—å°åº¦è¾¹å¢ƒ", + "314": "å°åº¦å—部", + "315": "å°åº¦â€”孟加拉国边境", + "316": "孟加拉国", + "317": "å°åº¦ä¸œåŒ—部", + "318": "中国云å—", + "319": "孟加拉湾", + "32": "俄勒冈", + "320": "å‰å°”剿–¯æ–¯å¦â€”新疆边境", + "321": "中国新疆å—部", + "322": "中国甘肃", + "323": "中国内蒙å¤è¥¿éƒ¨", + "324": "克什米尔—新疆边境", + "325": "䏭国钿µ·", + "326": "西伯利亚西å—部", + "327": "è´åŠ å°”æ¹–", + "328": "è´åŠ å°”æ¹–ä»¥ä¸œ", + "329": "哈è¨å…‹æ–¯å¦ä¸œéƒ¨", + "33": "爱达è·è¥¿éƒ¨", + "330": "伊塞克湖", + "331": "哈è¨å…‹æ–¯å¦â€”新疆边境", + "332": "中国新疆北部", + "333": "俄罗斯—蒙å¤è¾¹å¢ƒ", + "334": "è’™å¤", + "335": "乌拉尔山脉", + "336": "哈è¨å…‹æ–¯å¦è¥¿éƒ¨", + "337": "高加索东部", + "338": "里海", + "339": "乌兹别克斯å¦è¥¿éƒ¨", + "34": "加利ç¦å°¼äºšåŒ—部近海", + "340": "土库曼斯å¦", + "341": "土库曼斯å¦â€”伊朗边境", + "342": "土库曼斯å¦â€”阿富汗边境", + "343": "土耳其—伊朗边境", + "344": "亚美尼亚—阿塞拜疆—伊朗边境", + "345": "伊朗西北部", + "346": "伊朗—伊拉克边境", + "347": "伊朗西部", + "348": "伊朗中部", + "349": "阿富汗西北部", + "35": "加利ç¦å°¼äºšåŒ—部沿岸", + "350": "阿富汗西å—部", + "351": "沙特阿拉伯东部", + "352": "波斯湾", + "353": "伊朗å—部", + "354": "巴基斯å¦è¥¿å—部", + "355": "阿曼湾", + "356": "巴基斯å¦è¿‘æµ·", + "357": "乌克兰—摩尔多瓦—俄罗斯西å—部", + "358": "罗马尼亚", + "359": "ä¿åŠ åˆ©äºš", + "36": "加利ç¦å°¼äºšåŒ—部", + "360": "黑海", + "361": "克里米亚", + "362": "高加索西北部", + "363": "希腊—ä¿åŠ åˆ©äºšè¾¹å¢ƒ", + "364": "希腊", + "365": "çˆ±ç´æµ·", + "366": "土耳其东部", + "367": "æ ¼é²å‰äºšâ€”亚美尼亚—土耳其边境", + "368": "希腊å—部", + "369": "å¸Œè…Šä½æ³½å¡å°¼ç´¢æ–¯ç¾¤å²›", + "37": "内åŽè¾¾", + "370": "希腊克里特岛", + "371": "地中海东部", + "372": "塞浦路斯", + "373": "死海", + "374": "å™åˆ©äºš", + "375": "伊拉克", + "376": "è‘¡è„牙", + "377": "西ç­ç‰™", + "378": "比利牛斯山", + "379": "法国å—岸", + "38": "加利ç¦å°¼äºšè¿‘æµ·", + "380": "法国科西嘉", + "381": "æ„大利中部", + "382": "亚得里亚海", + "383": "巴尔干åŠå²›è¥¿åŒ—部", + "384": "直布罗陀以西", + "385": "直布罗陀海峡", + "386": "西ç­ç‰™å·´åˆ©é˜¿é‡Œç¾¤å²›", + "387": "地中海西部", + "388": "æ„大利撒ä¸", + "389": "第勒尼安海", + "39": "加利ç¦å°¼äºšä¸­éƒ¨", + "390": "æ„大利å—部", + "391": "阿尔巴尼亚", + "392": "希腊—阿尔巴尼亚边境", + "393": "马德拉群岛", + "394": "加那利群岛", + "395": "摩洛哥", + "396": "阿尔åŠåˆ©äºšåŒ—部", + "397": "çªå°¼æ–¯", + "398": "æ„大利西西里", + "399": "伊奥尼亚海", + "4": "科曼多尔群岛", + "40": "加利ç¦å°¼äºšâ€”内åŽè¾¾è¾¹å¢ƒ", + "400": "地中海中部", + "401": "利比亚沿岸", + "402": "北大西洋", + "403": "大西洋洋中脊北部", + "404": "亚速尔群岛附近", + "405": "亚速尔群岛", + "406": "大西洋洋中脊中部", + "407": "阿森æ¾å²›ä»¥åŒ—", + "408": "阿森æ¾å²›", + "409": "å—大西洋", + "41": "内åŽè¾¾å—部", + "410": "大西洋洋中脊å—部", + "411": "特里斯å¦â€”达库尼亚群岛", + "412": "布韦岛", + "413": "éžæ´²è¥¿å—", + "414": "大西洋东å—部", + "415": "äºšä¸æ¹¾ä¸œéƒ¨", + "416": "索科特拉岛", + "417": "阿拉伯海", + "418": "å°åº¦æ‹‰å…‹æ²™ç¾¤å²›", + "419": "索马里东北部", + "42": "亚利桑那西部", + "420": "北å°åº¦æ´‹", + "421": "嘉士伯海岭", + "422": "马尔代夫群岛", + "423": "拉克代夫海", + "424": "斯里兰å¡", + "425": "å—å°åº¦æ´‹", + "426": "查戈斯群岛", + "427": "毛里求斯—留尼汪", + "428": "西å—å°åº¦æ´‹æ´‹ä¸­è„Š", + "429": "中å°åº¦æ´‹æ´‹ä¸­è„Š", + "43": "加利ç¦å°¼äºšå—部", + "430": "éžæ´²ä»¥å—", + "431": "爱德åŽçŽ‹å­ç¾¤å²›", + "432": "克罗泽群岛", + "433": "凯尔盖朗群岛", + "434": "断裂海岭", + "435": "å°åº¦æ´‹æ´‹ä¸­è„Šä¸œå—部", + "436": "凯尔盖朗海å°å—部", + "437": "澳大利亚以å—", + "438": "è¨æ–¯å–€å½»æ¸©çœ", + "439": "马尼托巴çœ", + "44": "加利ç¦å°¼äºšâ€”亚利桑那边境", + "440": "哈德森湾", + "441": "安大略çœ", + "442": "哈得孙海峡", + "443": "é­åŒ—å…‹çœåŒ—部", + "444": "戴维斯海峡", + "445": "çº½èŠ¬å…°ä¸Žæ‹‰å¸ƒæ‹‰å¤šçœæ‹‰å¸ƒæ‹‰å¤š", + "446": "拉布拉多海", + "447": "é­åŒ—å…‹çœå—部", + "448": "é­åŒ—å…‹çœåŠ æ–¯ä½©åŠå²›", + "449": "é­åŒ—å…‹çœä¸œéƒ¨", + "45": "加利ç¦å°¼äºšâ€”下加利ç¦å°¼äºšè¾¹å¢ƒ", + "450": "é­åŒ—å…‹çœå®‰è’‚科斯蒂岛", + "451": "æ–°ä¸ä¼¦ç‘žå…‹çœ", + "452": "新斯科èˆçœ", + "453": "爱德åŽçŽ‹å­å²›çœ", + "454": "圣劳伦斯湾", + "455": "纽芬兰与拉布拉多çœçº½èЬ兰", + "456": "蒙大拿", + "457": "爱达è·ä¸œéƒ¨", + "458": "希伯根湖", + "459": "怀俄明黄石", + "46": "亚利桑那—索诺拉边境西部", + "460": "怀俄明", + "461": "北达科他", + "462": "å—达科他", + "463": "内布拉斯加", + "464": "明尼è‹è¾¾", + "465": "艾奥瓦", + "466": "卿–¯åº·æ˜Ÿ", + "467": "伊利诺伊", + "468": "密歇根", + "469": "å°ç¬¬å®‰çº³", + "47": "下加利ç¦å°¼äºšè¥¿å²¸è¿‘æµ·", + "470": "安大略çœå—部", + "471": "俄亥俄", + "472": "纽约", + "473": "宾夕法尼亚", + "474": "佛蒙特—新罕布什尔", + "475": "ç¼…å› ", + "476": "新英格兰å—部", + "477": "ç¼…å› æ¹¾", + "478": "犹他", + "479": "科罗拉多", + "48": "下加利ç¦å°¼äºš", + "480": "å ªè¨æ–¯", + "481": "艾奥瓦—密è‹é‡Œè¾¹å¢ƒ", + "482": "密è‹é‡Œâ€”å ªè¨æ–¯è¾¹å¢ƒ", + "483": "密è‹é‡Œ", + "484": "密è‹é‡Œâ€”阿肯色边境", + "485": "密è‹é‡Œä¸œéƒ¨", + "486": "密è‹é‡Œä¸œå—部", + "487": "密è‹é‡Œå¼€æ™®å‰æ‹‰å¤š", + "488": "伊利诺伊å—部", + "489": "å°ç¬¬å®‰çº³å—部", + "49": "加利ç¦å°¼äºšæ¹¾", + "490": "肯塔基", + "491": "西弗å‰å°¼äºš", + "492": "å¼—å‰å°¼äºš", + "493": "切è¨çš®å…‹æ¹¾", + "494": "新泽西", + "495": "亚利桑那东部", + "496": "新墨西哥", + "497": "å¾·å…‹è¨æ–¯ç‹­é•¿åœ°å¸¦", + "498": "å¾·å…‹è¨æ–¯è¥¿éƒ¨", + "499": "俄克拉何马", + "5": "阿留申群岛尼尔群岛", + "50": "索诺拉", + "500": "å¾·å…‹è¨æ–¯ä¸­éƒ¨", + "501": "阿肯色—俄克拉何马边境", + "502": "阿肯色", + "503": "è·¯æ˜“æ–¯å®‰é‚£â€”å¾·å…‹è¨æ–¯è¾¹å¢ƒ", + "504": "路易斯安那", + "505": "密西西比", + "506": "田纳西", + "507": "亚拉巴马", + "508": "佛罗里达西部", + "509": "ç¾Žå›½ä½æ²»äºš", + "51": "墨西哥中部近海", + "510": "ä½›ç½—é‡Œè¾¾â€”ä½æ²»äºšè¾¹å¢ƒ", + "511": "å—å¡ç½—æ¥çº³", + "512": "北å¡ç½—æ¥çº³", + "513": "美国东岸近海", + "514": "佛罗里达åŠå²›", + "515": "巴哈马群岛", + "516": "亚利桑那—索诺拉边境东部", + "517": "新墨西哥—奇瓦瓦边境", + "518": "å¾·å…‹è¨æ–¯â€”墨西哥边境", + "519": "å¾·å…‹è¨æ–¯å—部", + "52": "墨西哥中部沿岸", + "520": "å¾·å…‹è¨æ–¯æ²¿å²¸", + "521": "墨西哥奇瓦瓦", + "522": "墨西哥北部", + "523": "墨西哥中部", + "524": "墨西哥哈利斯科", + "525": "å¢¨è¥¿å“¥éŸ¦æ‹‰å…‹é²æ–¯", + "526": "墨西哥湾", + "527": "åŽä½©åˆ‡æ¹¾", + "528": "巴西", + "529": "圭亚那", + "53": "雷维利亚希赫多群岛", + "530": "è‹é‡Œå—", + "531": "法属圭亚那", + "532": "爱尔兰", + "533": "英国", + "534": "北海", + "535": "挪å¨å—部", + "536": "瑞典", + "537": "波罗的海", + "538": "法国", + "539": "比斯开湾", + "54": "哈利斯科近海", + "540": "è·å…°", + "541": "比利时", + "542": "丹麦", + "543": "德国", + "544": "瑞士", + "545": "æ„大利北部", + "546": "奥地利", + "547": "æ·å…‹å’Œæ–¯æ´›ä¼å…‹å…±å’Œå›½", + "548": "波兰", + "549": "匈牙利", + "55": "哈利斯科沿岸", + "550": "西北éž", + "551": "阿尔åŠåˆ©äºšå—部", + "552": "利比亚", + "553": "埃åŠ", + "554": "红海", + "555": "沙特阿拉伯西部", + "556": "ä¹å¾—", + "557": "è‹ä¸¹", + "558": "埃塞俄比亚", + "559": "äºšä¸æ¹¾è¥¿éƒ¨", + "56": "ç±³å´è‚¯æ²¿å²¸", + "560": "索马里西北部", + "561": "西北éžå—岸近海", + "562": "喀麦隆", + "563": "赤é“几内亚", + "564": "中éžå…±å’Œå›½", + "565": "加蓬", + "566": "刚果共和国", + "567": "刚果民主共和国", + "568": "乌干达", + "569": "维多利亚湖", + "57": "ç±³å´è‚¯", + "570": "肯尼亚", + "571": "索马里å—部", + "572": "å¦å™¶å°¼å–€æ¹–", + "573": "妿¡‘尼亚", + "574": "马达加斯加西北", + "575": "安哥拉", + "576": "赞比亚", + "577": "马拉维", + "578": "纳米比亚", + "579": "åšèŒ¨ç“¦çº³", + "58": "格雷罗沿岸", + "580": "津巴布韦", + "581": "莫桑比克", + "582": "莫桑比克海峡", + "583": "马达加斯加", + "584": "å—éž", + "585": "莱索托", + "586": "æ–¯å¨å£«å…°", + "587": "å—éžè¿‘æµ·", + "588": "澳大利亚西北", + "589": "澳大利亚以西", + "59": "格雷罗", + "590": "西澳大利亚", + "591": "北领地", + "592": "å—æ¾³å¤§åˆ©äºš", + "593": "å¡å¥”塔利亚湾", + "594": "昆士兰", + "595": "çŠç‘šæµ·", + "596": "新喀里多尼亚西北", + "597": "新喀里多尼亚西å—", + "598": "澳大利亚西å—", + "599": "澳大利亚å—岸近海", + "6": "阿留申群岛拉特群岛", + "60": "瓦哈å¡", + "600": "å—æ¾³å¤§åˆ©äºšæ²¿å²¸", + "601": "æ–°å—å¨å°”士", + "602": "澳大利亚维多利亚", + "603": "澳大利亚东å—岸", + "604": "澳大利亚东岸", + "605": "澳大利亚以东", + "606": "诺ç¦å…‹å²›", + "607": "新西兰西北", + "608": "巴斯海峡", + "609": "塔斯马尼亚", + "61": "æ°å¸•æ–¯", + "610": "澳大利亚东å—", + "611": "北太平洋", + "612": "å¤å¨å¤·ç¾¤å²›", + "613": "å¤å¨å¤·", + "614": "密克罗尼西亚è”邦", + "615": "马ç»å°”群岛", + "616": "马ç»å°”群岛埃内韦塔克环ç¤", + "617": "马ç»å°”群岛比基尼环ç¤", + "618": "å‰å°”伯特群岛", + "619": "约翰斯顿环ç¤", + "62": "墨西哥—å±åœ°é©¬æ‹‰è¾¹å¢ƒ", + "620": "莱æ©ç¾¤å²›", + "621": "巴尔米拉环ç¤", + "622": "圣诞岛", + "623": "图瓦å¢", + "624": "è²å°¼å…‹æ–¯ç¾¤å²›", + "625": "托克劳", + "626": "库克群岛北部", + "627": "库克群岛", + "628": "法属波利尼西亚社会群岛", + "629": "法属波利尼西亚土布艾群岛", + "63": "墨西哥近海", + "630": "æ³•å±žæ³¢åˆ©å°¼è¥¿äºšé©¬å…‹è¨æ–¯ç¾¤å²›", + "631": "法属波利尼西亚土阿莫土群岛", + "632": "å—太平洋", + "633": "罗蒙诺索夫海岭", + "634": "北冰洋", + "635": "格陵兰岛北岸", + "636": "格陵兰岛东部", + "637": "冰岛附近", + "638": "冰岛", + "639": "央麦æ©å²›", + "64": "ç±³å´è‚¯è¿‘æµ·", + "640": "格陵兰海", + "641": "斯瓦尔巴群岛以北", + "642": "æŒªå¨æµ·", + "643": "斯瓦尔巴群岛", + "644": "弗兰兹约瑟夫岛群岛以北", + "645": "弗兰兹约瑟夫岛群岛", + "646": "挪å¨åŒ—部", + "647": "巴伦支海", + "648": "新地岛", + "649": "喀拉海", + "65": "格雷罗近海", + "650": "西伯利亚西部沿岸", + "651": "北地群岛以北", + "652": "北地群岛", + "653": "西伯利亚中部沿岸", + "654": "北地群岛以东", + "655": "拉普æ·å¤«æµ·", + "656": "西伯利亚东å—部", + "657": "俄罗斯东部—中国东北部边境", + "658": "中国东北部", + "659": "æœé²œ", + "66": "ç“¦å“ˆå¡æ²¿å²¸", + "660": "日本海", + "661": "滨海边疆区", + "662": "库页岛", + "663": "é„‚éœæ¬¡å…‹æµ·", + "664": "中国东å—部", + "665": "黄海", + "666": "中国东部近海", + "667": "新西伯利亚群岛以北", + "668": "新西伯利亚群岛", + "669": "东西伯利亚海", + "67": "瓦哈å¡è¿‘æµ·", + "670": "东西伯利亚北岸", + "671": "东西伯利亚", + "672": "楚科奇海", + "673": "白令海峡", + "674": "圣劳伦斯岛", + "675": "波弗特海", + "676": "阿拉斯加北部", + "677": "加拿大育空地区北部", + "678": "伊丽莎白女王群岛", + "679": "西北地区—努纳武特地区", + "68": "æ°å¸•斯近海", + "680": "格陵兰岛西部", + "681": "巴芬湾", + "682": "努纳武特巴芬岛", + "683": "太平洋中部东å—部", + "684": "东太平洋海隆å—部", + "685": "夿´»èЂ岛", + "686": "智利海隆", + "687": "胡安·费尔å—德斯群岛", + "688": "新西兰北岛以东", + "689": "查塔姆群岛", + "69": "æ°å¸•斯沿岸", + "690": "查塔姆群岛以å—", + "691": "å¤ªå¹³æ´‹â€”å—æžæ´‹è„Š", + "692": "太平洋å—部", + "693": "太平洋中东部", + "694": "东太平洋海隆中部", + "695": "加拉帕戈斯群岛以西", + "696": "加拉帕戈斯群岛附近", + "697": "加拉帕戈斯群岛", + "698": "加拉帕戈斯群岛西å—部", + "699": "加拉帕戈斯群岛东å—部", + "7": "阿留申群岛安德烈亚诺夫群岛", + "70": "å±åœ°é©¬æ‹‰", + "700": "塔斯马尼亚岛以å—", + "701": "麦夸里群岛以西", + "702": "巴列尼群岛", + "703": "安达曼群岛", + "704": "尼科巴群岛", + "705": "è‹é—¨ç­”腊北部西岸近海", + "706": "è‹é—¨ç­”腊北部", + "707": "马æ¥è¥¿äºšé©¬æ¥åŠå²›", + "708": "泰国湾", + "709": "阿富汗中部", + "71": "å±åœ°é©¬æ‹‰æ²¿å²¸", + "710": "巴基斯å¦", + "711": "克什米尔西å—部", + "712": "å°åº¦â€”巴基斯å¦è¾¹å¢ƒ", + "713": "哈è¨å…‹æ–¯å¦ä¸­éƒ¨", + "714": "乌兹别克斯å¦ä¸œéƒ¨", + "715": "å¡”å‰å…‹æ–¯å¦", + "716": "å‰å°”剿–¯æ–¯å¦", + "717": "阿富汗—塔å‰å…‹æ–¯å¦è¾¹å¢ƒ", + "718": "阿富汗兴都库什", + "719": "å¡”å‰å…‹æ–¯å¦â€”新疆边境", + "72": "洪都拉斯", + "720": "克什米尔西北部", + "721": "芬兰", + "722": "挪å¨â€”俄罗斯边境", + "723": "芬兰—俄罗斯边境", + "724": "波罗的海国家—白俄罗斯—俄罗斯西北部", + "725": "西伯利亚西北部", + "726": "西伯利亚中北部", + "727": "å—æžæ´²ç»´å¤šåˆ©äºšåœ°", + "728": "罗斯海", + "729": "å—æžæ´²", + "73": "è¨å°”瓦多", + "730": "东太平洋海隆北部", + "731": "洪都拉斯以北", + "732": "å—æ¡‘å¨å¥‡ç¾¤å²›ä»¥ä¸œ", + "733": "泰国", + "734": "è€æŒ", + "735": "柬埔寨", + "736": "è¶Šå—", + "737": "北部湾", + "738": "雷克雅内斯海岭", + "739": "亚速尔群岛—圣文森特角海岭", + "74": "尼加拉瓜沿岸", + "740": "欧文断裂带", + "741": "å°åº¦æ´‹ä¸‰å‰æ±‡æŽ¥åŒº", + "742": "å°åº¦æ´‹â€”å—æžæ´‹ä¸­è„Šè¥¿éƒ¨", + "743": "西撒哈拉", + "744": "毛里塔尼亚", + "745": "马里", + "746": "塞内加尔—冈比亚", + "747": "几内亚", + "748": "塞拉利昂", + "749": "利比里亚", + "75": "尼加拉瓜", + "750": "科特迪瓦", + "751": "布基纳法索", + "752": "加纳", + "753": "è´å®â€”多哥", + "754": "尼日尔", + "755": "尼日利亚", + "756": "夿´»èŠ‚å²›ä¸œå—", + "757": "åŠ æ‹‰å¸•æˆˆæ–¯ä¸‰å‰æ±‡æŽ¥åŒº", + "76": "中美洲近海", + "77": "哥斯达黎加近海", + "78": "哥斯达黎加", + "79": "巴拿马以北", + "8": "普里比洛夫群岛", + "80": "巴拿马—哥斯达黎加边境", + "81": "巴拿马", + "82": "巴拿马—哥伦比亚边境", + "83": "巴拿马以å—", + "84": "墨西哥尤å¡å¦åŠå²›", + "85": "å¤å·´", + "86": "牙买加", + "87": "海地", + "88": "多米尼加共和国", + "89": "莫纳海峡", + "9": "阿留申群岛ç¦å…‹æ–¯ç¾¤å²›", + "90": "波多黎å„", + "91": "维尔京群岛", + "92": "背风群岛", + "93": "伯利兹", + "94": "加勒比海", + "95": "å‘风群岛", + "96": "哥伦比亚北岸", + "97": "委内瑞拉沿岸", + "98": "特立尼达", + "99": "哥伦比亚北部", + "AU": "澳大利亚", + "CA": "加拿大", + "CL": "智利", + "ES": "西ç­ç‰™", + "ID": "å°åº¦å°¼è¥¿äºš", + "IN": "å°åº¦", + "JP": "日本", + "KG": "å‰å°”剿–¯æ–¯å¦", + "KI": "基里巴斯", + "MacroregionFormat": "{0}{1}", + "MX": "墨西哥", + "NO": "挪å¨", + "NZ": "新西兰", + "PG": "巴布亚新几内亚", + "PT": "è‘¡è„牙", + "RU": "ä¿„ç½—æ–¯", + "UA": "乌克兰", + "US": "美国", + "ZA": "å—éž" + } +} \ No newline at end of file diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.FERegion/zh.json.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.FERegion/zh.json.meta new file mode 100644 index 0000000..5dde4f8 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.FERegion/zh.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 43ba948e5819ba848ac797fc11f87173 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.GlobalQuake.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.GlobalQuake.meta new file mode 100644 index 0000000..e82c537 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.GlobalQuake.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 05e07d665624e494c86b4ca56bd39546 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.GlobalQuake/und.json b/Assets/StreamingAssets/Messages/Cryville.EEW.GlobalQuake/und.json new file mode 100644 index 0000000..9e01f1a --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.GlobalQuake/und.json @@ -0,0 +1,6 @@ +{ + "Culture": "en-US", + "Strings": { + "SourceName": "GlobalQuakeServer" + } +} \ No newline at end of file diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.GlobalQuake/und.json.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.GlobalQuake/und.json.meta new file mode 100644 index 0000000..ff1dafa --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.GlobalQuake/und.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: d493277004f68134aa03c8800477034f +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.GlobalQuake/yue.json b/Assets/StreamingAssets/Messages/Cryville.EEW.GlobalQuake/yue.json new file mode 100644 index 0000000..631dc2f --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.GlobalQuake/yue.json @@ -0,0 +1,6 @@ +{ + "Culture": "yue-HK", + "Strings": { + "SourceName": "GlobalQuakeServer" + } +} \ No newline at end of file diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.GlobalQuake/yue.json.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.GlobalQuake/yue.json.meta new file mode 100644 index 0000000..a252784 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.GlobalQuake/yue.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 8845c3bb1840c5a4ab56e4fc866b1b4e +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.GlobalQuake/zh-Hant.json b/Assets/StreamingAssets/Messages/Cryville.EEW.GlobalQuake/zh-Hant.json new file mode 100644 index 0000000..8912340 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.GlobalQuake/zh-Hant.json @@ -0,0 +1,6 @@ +{ + "Culture": "zh-TW", + "Strings": { + "SourceName": "GlobalQuakeServer" + } +} \ No newline at end of file diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.GlobalQuake/zh-Hant.json.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.GlobalQuake/zh-Hant.json.meta new file mode 100644 index 0000000..3583481 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.GlobalQuake/zh-Hant.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 17f51a42755f98047a45ea172c814651 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.GlobalQuake/zh.json b/Assets/StreamingAssets/Messages/Cryville.EEW.GlobalQuake/zh.json new file mode 100644 index 0000000..f3a0ac1 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.GlobalQuake/zh.json @@ -0,0 +1,6 @@ +{ + "Culture": "zh-CN", + "Strings": { + "SourceName": "GlobalQuakeServer" + } +} \ No newline at end of file diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.GlobalQuake/zh.json.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.GlobalQuake/zh.json.meta new file mode 100644 index 0000000..b64a243 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.GlobalQuake/zh.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 72318e8f60052b041860ae13c01c6f1e +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.JMA.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA.meta new file mode 100644 index 0000000..046b820 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 667d117a1f39da74ebf42fc5bb9c2318 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/AreaEpicenter.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/AreaEpicenter.meta new file mode 100644 index 0000000..29082d9 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/AreaEpicenter.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 43102a21095a35f4cbc1d2bcc015c6fb +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/AreaEpicenter/en.json b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/AreaEpicenter/en.json new file mode 100644 index 0000000..5632741 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/AreaEpicenter/en.json @@ -0,0 +1,348 @@ +{ + "Culture": "en-US", + "Strings": { + "011": "Hokkaido Region", + "012": "Tohoku Region", + "013": "Hokuriku Region", + "014": "Kanto Koushin Region", + "015": "Ogasawara Region", + "016": "Tokai Region", + "017": "Kinki Region", + "018": "Chugoku Region", + "019": "Shikoku Region", + "020": "Kyushu Region", + "021": "Okinawa Region", + "100": "Northern Ishikari Region, Hokkaido", + "101": "Central Ishikari Region, Hokkaido", + "102": "Southern Ishikari Region, Hokkaido", + "105": "Northern Oshima Region, Hokkaido", + "106": "Eastern Oshima Region, Hokkaido", + "107": "Western Oshima Region, Hokkaido", + "110": "Hiyama Region, Hokkaido", + "115": "Northern Shiribeshi Region, Hokkaido", + "116": "Eastern Shiribeshi Region, Hokkaido", + "117": "Western Shiribeshi Region, Hokkaido", + "120": "Northern Sorachi Region, Hokkaido", + "121": "Central Sorachi Region, Hokkaido", + "122": "Southern Sorachi Region, Hokkaido", + "125": "Northern Kamikawa Region, Hokkaido", + "126": "Central Kamikawa Region, Hokkaido", + "127": "Southern Kamikawa Region, Hokkaido", + "130": "Central and northern Rumoi Region, Hokkaido", + "131": "Southern Rumoi Region, Hokkaido", + "135": "Northern Soya Region, Hokkaido", + "136": "Southern Soya Region, Hokkaido", + "140": "Abashiri Region, Hokkaido", + "141": "Kitami Region, Hokkaido", + "142": "Mombetsu Region, Hokkaido", + "145": "Western Iburi Region, Hokkaido", + "146": "Central and eastern Iburi Region, Hokkaido", + "150": "Western Hidaka Region, Hokkaido", + "151": "Central Hidaka Region, Hokkaido", + "152": "Eastern Hidaka Region, Hokkaido", + "155": "Northern Tokachi Region, Hokkaido", + "156": "Central Tokachi Region, Hokkaido", + "157": "Southern Tokachi Region, Hokkaido", + "160": "Northern Kushiro Region, Hokkaido", + "161": "Central and southern Kushiro Region, Hokkaido", + "165": "Northern Nemuro Region, Hokkaido", + "166": "Central Nemuro Region, Hokkaido", + "167": "Southern Nemuro Region, Hokkaido", + "180": "Off the southwest Coast of Hokkaido", + "181": "Off the west Coast of Hokkaido", + "182": "Ishikari Bay", + "183": "Off the northwest Coast of Hokkaido", + "184": "Soya Strait", + "186": "Adjacent Kunashiri Island", + "187": "Adjacent Etorofu Island", + "188": "Off the east Coast of Hokkaido", + "189": "Off the southeast Coast of the Nemuro Peninsula", + "190": "Off the Coast of Kushiro", + "191": "Off the Coast of Tokachi", + "192": "Off the Coast of Urakawa", + "193": "Off the Coast of Tomakomai", + "194": "Uchiura Bay", + "195": "Off the east Coast of Soya", + "196": "Off the Coast of Abashiri", + "197": "Off the southeast Coast of Etorofu Island", + "200": "Northern Tsugaru, Aomori Prefecture", + "201": "Southern Tsugaru, Aomori Prefecture", + "202": "Sanpachi-Kamikita Region, Aomori Prefecture", + "203": "Shimokita Region, Aomori Prefecture", + "210": "Northern Coast of Iwate Prefecture", + "211": "Southern Coast of Iwate Prefecture", + "212": "Northern Inland of Iwate Prefecture", + "213": "Southern Inland of Iwate Prefecture", + "220": "Northern Miyagi Prefecture", + "221": "Southern Miyagi Prefecture", + "222": "Central Miyagi Prefecture", + "230": "Northern Coast of Akita Prefecture", + "231": "Southern Coast of Akita Prefecture", + "232": "Northern Inland of Akita Prefecture", + "233": "Southern Inland of Akita Prefecture", + "240": "Shonai Region, Yamagata Prefecture", + "241": "Mogami Region, Yamagata Prefecture", + "242": "Murayama Region, Yamagata Prefecture", + "243": "Okitama Region, Yamagata Prefecture", + "250": "Nakadori, Fukushima Prefecture", + "251": "Hamadori, Fukushima Prefecture", + "252": "Aizu, Fukushima Prefecture", + "280": "Tsugaru Strait", + "281": "Off the Coast of Yamagata Prefecture", + "282": "Off the Coast of Akita Prefecture", + "283": "Off the west Coast of Aomori Prefecture", + "284": "Mutsu Bay", + "285": "Off the east Coast of Aomori Prefecture", + "286": "Off the Coast of Iwate Prefecture", + "287": "Off the Coast of Miyagi Prefecture", + "288": "Off the Coast of Sanriku", + "289": "Off the Coast of Fukushima Prefecture", + "300": "Northern Ibaraki Prefecture", + "301": "Southern Ibaraki Prefecture", + "309": "Off the southeast Coast of Chiba Prefecture", + "310": "Northern Tochigi Prefecture", + "311": "Southern Tochigi Prefecture", + "320": "Northern Gunma Prefecture", + "321": "Southern Gunma Prefecture", + "330": "Northern Saitama Prefecture", + "331": "Southern Saitama Prefecture", + "332": "Chichibu Region, Saitama Prefecture", + "340": "Northeastern Chiba Prefecture", + "341": "Northwestern Chiba Prefecture", + "342": "Southern Chiba Prefecture", + "349": "Off the south Coast of Boso Peninsula", + "350": "23 wards, Tokyo", + "351": "Eastern Tama, Tokyo", + "352": "Western Tama, Tokyo", + "360": "Eastern Kanagawa Prefecture", + "361": "Western Kanagawa Prefecture", + "370": "Joetsu, Niigata Prefecture", + "371": "Chuetsu, Niigata Prefecture", + "372": "Kaetsu, Niigata Prefecture", + "378": "Off the Coast of Kaetsu, Niigata Prefecture", + "379": "Off the Coast of Joetsu and Chuetsu, Niigata Prefecture", + "380": "Eastern Toyama Prefecture", + "381": "Western Toyama Prefecture", + "390": "Noto, Ishikawa Prefecture", + "391": "Kaga, Ishikawa Prefecture", + "400": "Reihoku, Fukui Prefecture", + "401": "Reinan, Fukui Prefecture", + "411": "Central · Western Yamanashi Prefecture", + "412": "Eastern Region · Fuji Five Lakes, Yamanashi Prefecture", + "420": "Northern Nagano Prefecture", + "421": "Central Nagano Prefecture", + "422": "Southern Nagano Prefecture", + "430": "Hida, Gifu Prefecture", + "431": "Eastern Mino, Gifu Prefecture", + "432": "Central and western Mino, Gifu Prefecture", + "440": "Izu, Shizuoka Prefecture", + "441": "Eastern Shizuoka Prefecture", + "442": "Central Shizuoka Prefecture", + "443": "Western Shizuoka Prefecture", + "450": "Eastern Aichi Prefecture", + "451": "Western Aichi Prefecture", + "460": "Northern Mie Prefecture", + "461": "Central Mie Prefecture", + "462": "Southern Mie Prefecture", + "469": "Off the southeast Coast of Mie Prefecture", + "471": "Off the Coast of Ibaraki Prefecture", + "472": "Off the east Coast of Kanto", + "473": "Off the east Coast of Chiba Prefecture", + "475": "Off the east Coast of Hachijojima Island", + "476": "Adjacent Sea of Hachijojima Island", + "477": "Tokyo Bay", + "478": "Sagami Bay", + "480": "Adjacent Sea of Izu-Oshima Island", + "481": "Off the east Coast of Izu Peninsula", + "482": "Adjacent Sea of Miyakejima Island", + "483": "Adjacent Sea of Niijima Island, Kozushima Island", + "485": "Suruga Bay", + "486": "Off the south Coast of Suruga Bay", + "487": "Enshunada Sea", + "489": "Mikawa Bay", + "490": "Ise Bay", + "492": "Wakasa Bay", + "493": "Off the Coast of Fukui Prefecture", + "494": "Off the west Coast of Ishikawa Prefecture", + "495": "Off the Coast of Noto Peninsula", + "497": "Toyama Bay", + "498": "Adjacent Sado", + "499": "Off the south Coast of Tokaido", + "500": "Northern Shiga Prefecture", + "501": "Southern Shiga Prefecture", + "510": "Northern Kyoto Prefecture", + "511": "Southern Kyoto Prefecture", + "520": "Northern Osaka Prefecture", + "521": "Southern Osaka Prefecture", + "530": "Northern Hyogo Prefecture", + "531": "Southeastern Hyogo Prefecture", + "532": "Southwestern Hyogo Prefecture", + "540": "Nara Prefecture", + "550": "Northern Wakayama Prefecture", + "551": "Southern Wakayama Prefecture", + "560": "Eastern Tottori Prefecture", + "562": "Central Tottori Prefecture", + "563": "Western Tottori Prefecture", + "570": "Eastern Shimane Prefecture", + "571": "Western Shimane Prefecture", + "580": "Northern Okayama Prefecture", + "581": "Southern Okayama Prefecture", + "590": "Northern Hiroshima Prefecture", + "591": "Southeastern Hiroshima Prefecture", + "592": "Southwestern Hiroshima Prefecture", + "600": "Northern Tokushima Prefecture", + "601": "Southern Tokushima Prefecture", + "610": "Eastern Kagawa Prefecture", + "611": "Western Kagawa Prefecture", + "620": "Toyo, Ehime Prefecture", + "621": "Chuyo, Ehime Prefecture", + "622": "Nanyo, Ehime Prefecture", + "630": "Eastern Kochi Prefecture", + "631": "Central Kochi Prefecture", + "632": "Western Kochi Prefecture", + "673": "Tosa Bay", + "674": "Kiisuido Strait", + "675": "Osaka Bay", + "676": "Harimanada Sea", + "677": "Central Setonaikai Sea", + "678": "Akinada Sea", + "679": "Suonada Sea", + "680": "Iyonada Sea", + "681": "Bungosuido Strait", + "682": "Off the northwest Coast of Yamaguchi Prefecture", + "683": "Off the Coast of Shimane Prefecture", + "684": "Off the Coast of Tottori Prefecture", + "685": "Adjacent Sea of Oki Islands", + "686": "Off the north Coast of Hyogo Prefecture", + "687": "Off the Coast of Kyoto Prefecture", + "688": "Adjacent Awajishima Island", + "689": "Off the south Coast of Wakayama Prefecture", + "700": "Northern Yamaguchi Prefecture", + "702": "Western Yamaguchi Prefecture", + "703": "Eastern Yamaguchi Prefecture", + "704": "Central Yamaguchi Prefecture", + "710": "Fukuoka Region, Fukuoka Prefecture", + "711": "Kitakyushu Region, Fukuoka Prefecture", + "712": "Chikuho Region, Fukuoka Prefecture", + "713": "Chikugo Region, Fukuoka Prefecture", + "720": "Northern Saga Prefecture", + "721": "Southern Saga Prefecture", + "730": "Northern Nagasaki Prefecture", + "731": "Southwestern Nagasaki Prefecture", + "732": "Shimabara Peninsula, Nagasaki Prefecture", + "740": "Aso Region, Kumamoto Prefecture", + "741": "Kumamoto Region, Kumamoto Prefecture", + "742": "Kuma Region, Kumamoto Prefecture", + "743": "Amakusa and Ashikita Region, Kumamoto Prefecture", + "750": "Northern Oita Prefecture", + "751": "Central Oita Prefecture", + "752": "Southern Oita Prefecture", + "753": "Western Oita Prefecture", + "760": "Plain Area of Northern Miyazaki Prefecture", + "761": "Area along Mountains of Northern Miyazaki Prefecture", + "762": "Plain Area of Southern Miyazaki Prefecture", + "763": "Area along Mountains of Southern Miyazaki Prefecture", + "770": "Satsuma Region, Kagoshima Prefecture", + "771": "Osumi Region, Kagoshima Prefecture", + "783": "Adjacent Sea of Goto Islands", + "784": "Amakusanada Sea", + "785": "Ariake Sea", + "786": "Tachibana Bay", + "787": "Kagoshima Bay", + "790": "Adjacent Sea of Tanegashima Island", + "791": "Hyuganada Sea", + "793": "Adjacent Sea of Amami-Oshima Island", + "795": "Adjacent Sea of Ikishima Island and Tsushima Island", + "796": "Off the northwest Coast of Fukuoka Prefecture", + "797": "Off the west Coast of Satsuma Peninsula", + "798": "Adjacent Sea of Tokara Islands", + "799": "Off the northwest Coast of Amami- Oshima Island", + "820": "Off the east Coast of Osumi Peninsula", + "821": "Off the southeast Coast of Kyushu", + "822": "Off the southeast Coast of Tanegashima Island", + "823": "Off the northeast Coast of Amami-Oshima Island", + "850": "Adjacent Sea of Okinawa Main Island", + "851": "Adjacent Sea of Minami-Daitojima Island", + "852": "Off the south Coast of Okinawa Main Island", + "853": "Adjacent Sea of Miyakojima Island", + "854": "Adjacent Sea of Ishigakijima Island", + "855": "Off the south Coast of Ishigakijima Island", + "856": "Adjacent Sea of Iriomotejima Island", + "857": "Adjacent Sea of Yonagunijima Island", + "858": "Off the northwest Coast of Okinawa Main Island", + "859": "Off the northwest Coast of Miyakojima Island", + "860": "Off the northwest Coast of Ishigakijima Island", + "900": "the vicinity of Taiwan", + "901": "East China Sea", + "902": "Off the Coast of Shikoku", + "903": "Adjacent Sea of Torishima Island", + "904": "Off the east Coast of Torishima Island", + "905": "Southern Sea of Okhotsk", + "906": "Off the west Coast of Sakhalin", + "907": "Northern Sea of Japan", + "908": "Central Sea of Japan", + "909": "Weatern Sea of Japan", + "911": "Adjacent Sea of Chichijima Island", + "912": "Kurile Islands", + "913": "Off the southeast Coast of Kurile Islands", + "914": "Off the southeast Coast of Hokkaido", + "915": "Off the east Coast of Tohoku", + "916": "Off the west Coast of Ogasawara Islands", + "917": "Adjacent Sea of Ioto Island", + "918": "Off the east Coast of Ogasawara Islands", + "919": "Off the south Coast of Nankaido", + "920": "Off the east Coast of Satsunan Islands", + "921": "Off the south Coast of Honshu", + "922": "Adjacent Southern Sakhalin", + "930": "Northwest Pacific Ocean", + "932": "Mariana Islands", + "933": "Yellow Sea", + "934": "Southern Korean Peninsula", + "935": "Northern Korean Peninsula", + "936": "Northeastern China", + "937": "Adjacent Vladivostok", + "938": "Southern Siberia", + "939": "Adjacent Sea of Sakhalin", + "940": "Aleutian Islands", + "941": "Adjacent Kamchatka Peninsula", + "942": "Western North America", + "943": "Central North America", + "944": "Eastern North America", + "945": "Central America", + "946": "Western South America", + "947": "Central South America", + "948": "Eastern South America", + "949": "Northeast Pacific Ocean", + "950": "South Pacific Ocean", + "951": "Adjacent Indochina Peninsula", + "952": "Adjacent Philippines", + "953": "Adjacent Indonesia", + "954": "Adjacent Guam", + "955": "Adjacent New Guinea", + "956": "Adjacent New Zealand", + "957": "Adjacent Australia", + "958": "Adjacent Siberia", + "959": "Western Russia", + "960": "Central Russia", + "961": "Eastern Russia", + "962": "Central Asia", + "963": "Western China", + "964": "Central China", + "965": "Eastern China", + "966": "Adjacent India", + "967": "Indian Ocean", + "968": "Middle East", + "969": "Western Europe", + "970": "Central Europe", + "971": "Eastern Europe", + "972": "Mediterranean", + "973": "Western Africa", + "974": "Central Africa", + "975": "Eastern Africa", + "976": "North Atlantic Ocean", + "977": "South Atlantic Ocean", + "978": "Near the North Pole", + "979": "Near the South Pole", + "999": "Distant" + } +} \ No newline at end of file diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/AreaEpicenter/en.json.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/AreaEpicenter/en.json.meta new file mode 100644 index 0000000..217d0c8 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/AreaEpicenter/en.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 77dc6053f0cf4d748b7c54d36be7dc3f +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/AreaEpicenter/und.json b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/AreaEpicenter/und.json new file mode 100644 index 0000000..42ec07a --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/AreaEpicenter/und.json @@ -0,0 +1,348 @@ +{ + "Culture": "ja-JP", + "Strings": { + "011": "北海é“地方", + "012": "æ±åŒ—地方", + "013": "北陸地方", + "014": "é–¢æ±ç”²ä¿¡åœ°æ–¹", + "015": "å°ç¬ åŽŸåœ°æ–¹", + "016": "æ±æµ·åœ°æ–¹", + "017": "近畿地方", + "018": "中国地方", + "019": "四国地方", + "020": "ä¹å·žåœ°æ–¹", + "021": "沖縄地方", + "100": "石狩地方北部", + "101": "石狩地方中部", + "102": "石狩地方å—部", + "105": "渡島地方北部", + "106": "渡島地方æ±éƒ¨", + "107": "渡島地方西部", + "110": "檜山地方", + "115": "後志地方北部", + "116": "後志地方æ±éƒ¨", + "117": "後志地方西部", + "120": "空知地方北部", + "121": "空知地方中部", + "122": "空知地方å—部", + "125": "上å·åœ°æ–¹åŒ—部", + "126": "上å·åœ°æ–¹ä¸­éƒ¨", + "127": "上å·åœ°æ–¹å—部", + "130": "ç•™èŒåœ°æ–¹ä¸­åŒ—部", + "131": "ç•™èŒåœ°æ–¹å—部", + "135": "宗谷地方北部", + "136": "宗谷地方å—部", + "140": "網走地方", + "141": "北見地方", + "142": "紋別地方", + "145": "胆振地方西部", + "146": "胆振地方中æ±éƒ¨", + "150": "日高地方西部", + "151": "日高地方中部", + "152": "日高地方æ±éƒ¨", + "155": "åå‹åœ°æ–¹åŒ—部", + "156": "åå‹åœ°æ–¹ä¸­éƒ¨", + "157": "åå‹åœ°æ–¹å—部", + "160": "釧路地方北部", + "161": "釧路地方中å—部", + "165": "根室地方北部", + "166": "根室地方中部", + "167": "根室地方å—部", + "180": "北海é“å—西沖", + "181": "北海é“西方沖", + "182": "石狩湾", + "183": "北海é“北西沖", + "184": "宗谷海峡", + "186": "国後島付近", + "187": "択æ‰å³¶ä»˜è¿‘", + "188": "åŒ—æµ·é“æ±æ–¹æ²–", + "189": "根室åŠå³¶å—æ±æ²–", + "190": "釧路沖", + "191": "å勿²–", + "192": "浦河沖", + "193": "è‹«å°ç‰§æ²–", + "194": "内浦湾", + "195": "å®—è°·æ±æ–¹æ²–", + "196": "網走沖", + "197": "択æ‰å³¶å—æ±æ²–", + "200": "é’æ£®çœŒæ´¥è»½åŒ—部", + "201": "é’æ£®çœŒæ´¥è»½å—部", + "202": "é’æ£®çœŒä¸‰å…«ä¸ŠåŒ—地方", + "203": "é’æ£®çœŒä¸‹åŒ—地方", + "210": "岩手県沿岸北部", + "211": "岩手県沿岸å—部", + "212": "岩手県内陸北部", + "213": "岩手県内陸å—部", + "220": "宮城県北部", + "221": "宮城県å—部", + "222": "宮城県中部", + "230": "秋田県沿岸北部", + "231": "秋田県沿岸å—部", + "232": "秋田県内陸北部", + "233": "秋田県内陸å—部", + "240": "山形県庄内地方", + "241": "山形県最上地方", + "242": "山形県æ‘山地方", + "243": "山形県置賜地方", + "250": "ç¦å³¶çœŒä¸­é€šã‚Š", + "251": "ç¦å³¶çœŒæµœé€šã‚Š", + "252": "ç¦å³¶çœŒä¼šæ´¥", + "280": "津軽海峡", + "281": "山形県沖", + "282": "秋田県沖", + "283": "é’æ£®çœŒè¥¿æ–¹æ²–", + "284": "陸奥湾", + "285": "é’æ£®çœŒæ±æ–¹æ²–", + "286": "岩手県沖", + "287": "宮城県沖", + "288": "三陸沖", + "289": "ç¦å³¶çœŒæ²–", + "300": "茨城県北部", + "301": "茨城県å—部", + "309": "åƒè‘‰çœŒå—æ±æ²–", + "310": "栃木県北部", + "311": "栃木県å—部", + "320": "群馬県北部", + "321": "群馬県å—部", + "330": "埼玉県北部", + "331": "埼玉県å—部", + "332": "埼玉県秩父地方", + "340": "åƒè‘‰çœŒåŒ—æ±éƒ¨", + "341": "åƒè‘‰çœŒåŒ—西部", + "342": "åƒè‘‰çœŒå—部", + "349": "房ç·åŠå³¶å—方沖", + "350": "æ±äº¬éƒ½ï¼’3区", + "351": "æ±äº¬éƒ½å¤šæ‘©æ±éƒ¨", + "352": "æ±äº¬éƒ½å¤šæ‘©è¥¿éƒ¨", + "360": "神奈å·çœŒæ±éƒ¨", + "361": "神奈å·çœŒè¥¿éƒ¨", + "370": "新潟県上越地方", + "371": "新潟県中越地方", + "372": "新潟県下越地方", + "378": "新潟県下越沖", + "379": "新潟県上中越沖", + "380": "富山県æ±éƒ¨", + "381": "富山県西部", + "390": "石å·çœŒèƒ½ç™»åœ°æ–¹", + "391": "石å·çœŒåŠ è³€åœ°æ–¹", + "400": "ç¦äº•県嶺北", + "401": "ç¦äº•県嶺å—", + "411": "山梨県中・西部", + "412": "山梨県æ±éƒ¨ãƒ»å¯Œå£«äº”æ¹–", + "420": "長野県北部", + "421": "長野県中部", + "422": "長野県å—部", + "430": "å²é˜œçœŒé£›é¨¨åœ°æ–¹", + "431": "å²é˜œçœŒç¾Žæ¿ƒæ±éƒ¨", + "432": "å²é˜œçœŒç¾Žæ¿ƒä¸­è¥¿éƒ¨", + "440": "é™å²¡çœŒä¼Šè±†åœ°æ–¹", + "441": "é™å²¡çœŒæ±éƒ¨", + "442": "é™å²¡çœŒä¸­éƒ¨", + "443": "é™å²¡çœŒè¥¿éƒ¨", + "450": "愛知県æ±éƒ¨", + "451": "愛知県西部", + "460": "三é‡çœŒåŒ—部", + "461": "三é‡çœŒä¸­éƒ¨", + "462": "三é‡çœŒå—部", + "469": "三é‡çœŒå—æ±æ²–", + "471": "茨城県沖", + "472": "é–¢æ±æ±æ–¹æ²–", + "473": "åƒè‘‰çœŒæ±æ–¹æ²–", + "475": "å…«ä¸ˆå³¶æ±æ–¹æ²–", + "476": "八丈島近海", + "477": "æ±äº¬æ¹¾", + "478": "相模湾", + "480": "伊豆大島近海", + "481": "伊豆åŠå³¶æ±æ–¹æ²–", + "482": "三宅島近海", + "483": "新島・神津島近海", + "485": "駿河湾", + "486": "é§¿æ²³æ¹¾å—æ–¹æ²–", + "487": "é å·žç˜", + "489": "三河湾", + "490": "伊勢湾", + "492": "若狭湾", + "493": "ç¦äº•県沖", + "494": "石å·çœŒè¥¿æ–¹æ²–", + "495": "能登åŠå³¶æ²–", + "497": "富山湾", + "498": "使¸¡ä»˜è¿‘", + "499": "æ±æµ·é“å—æ–¹æ²–", + "500": "滋賀県北部", + "501": "滋賀県å—部", + "510": "京都府北部", + "511": "京都府å—部", + "520": "大阪府北部", + "521": "大阪府å—部", + "530": "兵庫県北部", + "531": "å…µåº«çœŒå—æ±éƒ¨", + "532": "兵庫県å—西部", + "540": "奈良県", + "550": "和歌山県北部", + "551": "和歌山県å—部", + "560": "é³¥å–県æ±éƒ¨", + "562": "é³¥å–県中部", + "563": "é³¥å–県西部", + "570": "島根県æ±éƒ¨", + "571": "島根県西部", + "580": "岡山県北部", + "581": "岡山県å—部", + "590": "広島県北部", + "591": "åºƒå³¶çœŒå—æ±éƒ¨", + "592": "広島県å—西部", + "600": "徳島県北部", + "601": "徳島県å—部", + "610": "香å·çœŒæ±éƒ¨", + "611": "香å·çœŒè¥¿éƒ¨", + "620": "愛媛県æ±äºˆ", + "621": "愛媛県中予", + "622": "愛媛県å—予", + "630": "高知県æ±éƒ¨", + "631": "高知県中部", + "632": "高知県西部", + "673": "åœŸä½æ¹¾", + "674": "紀伊水é“", + "675": "大阪湾", + "676": "播磨ç˜", + "677": "瀬戸内海中部", + "678": "安芸ç˜", + "679": "周防ç˜", + "680": "伊予ç˜", + "681": "豊後水é“", + "682": "å±±å£çœŒåŒ—西沖", + "683": "島根県沖", + "684": "é³¥å–県沖", + "685": "éš å²å³¶è¿‘æµ·", + "686": "兵庫県北方沖", + "687": "京都府沖", + "688": "淡路島付近", + "689": "å’Œæ­Œå±±çœŒå—æ–¹æ²–", + "700": "å±±å£çœŒåŒ—部", + "702": "å±±å£çœŒè¥¿éƒ¨", + "703": "å±±å£çœŒæ±éƒ¨", + "704": "å±±å£çœŒä¸­éƒ¨", + "710": "ç¦å²¡çœŒç¦å²¡åœ°æ–¹", + "711": "ç¦å²¡çœŒåŒ—ä¹å·žåœ°æ–¹", + "712": "ç¦å²¡çœŒç­‘豊地方", + "713": "ç¦å²¡çœŒç­‘後地方", + "720": "ä½è³€çœŒåŒ—部", + "721": "ä½è³€çœŒå—部", + "730": "長崎県北部", + "731": "長崎県å—西部", + "732": "長崎県島原åŠå³¶", + "740": "熊本県阿蘇地方", + "741": "熊本県熊本地方", + "742": "熊本県çƒç£¨åœ°æ–¹", + "743": "熊本県天è‰ãƒ»èŠ¦åŒ—åœ°æ–¹", + "750": "大分県北部", + "751": "大分県中部", + "752": "大分県å—部", + "753": "大分県西部", + "760": "宮崎県北部平野部", + "761": "宮崎県北部山沿ã„", + "762": "宮崎県å—部平野部", + "763": "宮崎県å—部山沿ã„", + "770": "鹿å…島県薩摩地方", + "771": "鹿å…島県大隅地方", + "783": "五島列島近海", + "784": "天è‰ç˜", + "785": "有明海", + "786": "橘湾", + "787": "鹿å…å³¶æ¹¾", + "790": "種å­å³¶è¿‘æµ·", + "791": "æ—¥å‘ç˜", + "793": "奄美大島近海", + "795": "壱å²ãƒ»å¯¾é¦¬è¿‘æµ·", + "796": "ç¦å²¡çœŒåŒ—西沖", + "797": "è–©æ‘©åŠå³¶è¥¿æ–¹æ²–", + "798": "トカラ列島近海", + "799": "奄美大島北西沖", + "820": "大隅åŠå³¶æ±æ–¹æ²–", + "821": "ä¹å·žåœ°æ–¹å—æ±æ²–", + "822": "種å­å³¶å—æ±æ²–", + "823": "å¥„ç¾Žå¤§å³¶åŒ—æ±æ²–", + "850": "沖縄本島近海", + "851": "å—大æ±å³¶è¿‘æµ·", + "852": "æ²–ç¸„æœ¬å³¶å—æ–¹æ²–", + "853": "å®®å¤å³¶è¿‘æµ·", + "854": "石垣島近海", + "855": "çŸ³åž£å³¶å—æ–¹æ²–", + "856": "西表島付近", + "857": "与那国島近海", + "858": "沖縄本島北西沖", + "859": "å®®å¤å³¶åŒ—西沖", + "860": "石垣島北西沖", + "900": "å°æ¹¾ä»˜è¿‘", + "901": "æ±ã‚·ãƒŠæµ·", + "902": "四国沖", + "903": "鳥島近海", + "904": "é³¥å³¶æ±æ–¹æ²–", + "905": "オホーツク海å—部", + "906": "サãƒãƒªãƒ³è¥¿æ–¹æ²–", + "907": "日本海北部", + "908": "日本海中部", + "909": "日本海西部", + "911": "父島近海", + "912": "åƒå³¶åˆ—å³¶", + "913": "åƒå³¶åˆ—å³¶å—æ±æ²–", + "914": "北海é“å—æ±æ²–", + "915": "æ±åŒ—åœ°æ–¹æ±æ–¹æ²–", + "916": "å°ç¬ åŽŸè«¸å³¶è¥¿æ–¹æ²–", + "917": "硫黄島近海", + "918": "å°ç¬ åŽŸè«¸å³¶æ±æ–¹æ²–", + "919": "å—æµ·é“å—æ–¹æ²–", + "920": "è–©å—è«¸å³¶æ±æ–¹æ²–", + "921": "æœ¬å·žå—æ–¹æ²–", + "922": "サãƒãƒªãƒ³å—部付近", + "930": "北西太平洋", + "932": "マリアナ諸島", + "933": "黄海", + "934": "æœé®®åŠå³¶å—部", + "935": "æœé®®åŠå³¶åŒ—部", + "936": "中国æ±åŒ—部", + "937": "ウラジオストク付近", + "938": "シベリアå—部", + "939": "サãƒãƒªãƒ³è¿‘æµ·", + "940": "アリューシャン列島", + "941": "カムãƒãƒ£ãƒ„ã‚«åŠå³¶ä»˜è¿‘", + "942": "北米西部", + "943": "北米中部", + "944": "北米æ±éƒ¨", + "945": "中米", + "946": "å—米西部", + "947": "å—米中部", + "948": "å—ç±³æ±éƒ¨", + "949": "北æ±å¤ªå¹³æ´‹", + "950": "å—太平洋", + "951": "インドシナåŠå³¶ä»˜è¿‘", + "952": "フィリピン付近", + "953": "インドãƒã‚·ã‚¢ä»˜è¿‘", + "954": "グアム付近", + "955": "ニューギニア付近", + "956": "ニュージーランド付近", + "957": "オーストラリア付近", + "958": "シベリア付近", + "959": "ロシア西部", + "960": "ロシア中部", + "961": "ロシアæ±éƒ¨", + "962": "中央アジア", + "963": "中国西部", + "964": "中国中部", + "965": "中国æ±éƒ¨", + "966": "インド付近", + "967": "インド洋", + "968": "中æ±", + "969": "ヨーロッパ西部", + "970": "ヨーロッパ中部", + "971": "ヨーロッパæ±éƒ¨", + "972": "地中海", + "973": "アフリカ西部", + "974": "アフリカ中部", + "975": "アフリカæ±éƒ¨", + "976": "北大西洋", + "977": "å—大西洋", + "978": "北極付近", + "979": "å—æ¥µä»˜è¿‘", + "999": "é åœ°" + } +} \ No newline at end of file diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/AreaEpicenter/und.json.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/AreaEpicenter/und.json.meta new file mode 100644 index 0000000..12a2ea4 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/AreaEpicenter/und.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 3707cbfe8da25ee4baa24b2cd295bf41 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/AreaEpicenter/yue.json b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/AreaEpicenter/yue.json new file mode 100644 index 0000000..f69e886 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/AreaEpicenter/yue.json @@ -0,0 +1,348 @@ +{ + "Culture": "yue-HK", + "Strings": { + "011": "北海é“地方", + "012": "æ±åŒ—地方", + "013": "北陸地方", + "014": "é–¢æ±ç”²ä¿¡åœ°æ–¹", + "015": "å°ç¬ åŽŸåœ°æ–¹", + "016": "æ±æµ·åœ°æ–¹", + "017": "近畿地方", + "018": "中国地方", + "019": "四国地方", + "020": "ä¹å·žåœ°æ–¹", + "021": "沖繩地方", + "100": "石狩地方北部", + "101": "石狩地方中部", + "102": "石狩地方å—部", + "105": "渡島地方北部", + "106": "渡島地方æ±éƒ¨", + "107": "渡島地方西部", + "110": "檜山地方", + "115": "後志地方北部", + "116": "後志地方æ±éƒ¨", + "117": "後志地方西部", + "120": "空知地方北部", + "121": "空知地方中部", + "122": "空知地方å—部", + "125": "上å·åœ°æ–¹åŒ—部", + "126": "上å·åœ°æ–¹ä¸­éƒ¨", + "127": "上å·åœ°æ–¹å—部", + "130": "ç•™èŒåœ°æ–¹ä¸­åŒ—部", + "131": "ç•™èŒåœ°æ–¹å—部", + "135": "宗谷地方北部", + "136": "宗谷地方å—部", + "140": "網走地方", + "141": "北見地方", + "142": "紋別地方", + "145": "胆振地方西部", + "146": "胆振地方中æ±éƒ¨", + "150": "日高地方西部", + "151": "日高地方中部", + "152": "日高地方æ±éƒ¨", + "155": "åå‹åœ°æ–¹åŒ—部", + "156": "åå‹åœ°æ–¹ä¸­éƒ¨", + "157": "åå‹åœ°æ–¹å—部", + "160": "釧路地方北部", + "161": "釧路地方中å—部", + "165": "根室地方北部", + "166": "根室地方中部", + "167": "根室地方å—部", + "180": "北海é“西å—外海", + "181": "北海é“西方外海", + "182": "石狩ç£", + "183": "北海é“西北外海", + "184": "宗谷海峡", + "186": "國後島附近", + "187": "擇æ‰å³¶é™„è¿‘", + "188": "åŒ—æµ·é“æ±æ–¹å¤–æµ·", + "189": "根室åŠå³¶æ±å—外海", + "190": "釧路外海", + "191": "åå‹å¤–æµ·", + "192": "浦河外海", + "193": "è‹«å°ç‰§å¤–æµ·", + "194": "内浦ç£", + "195": "å®—è°·æ±æ–¹å¤–æµ·", + "196": "網走外海", + "197": "擇æ‰å³¶æ±å—外海", + "200": "é’æ£®ç¸£æ´¥è»½åŒ—部", + "201": "é’æ£®ç¸£æ´¥è»½å—部", + "202": "é’æ£®ç¸£ä¸‰å…«ä¸ŠåŒ—地方", + "203": "é’æ£®ç¸£ä¸‹åŒ—地方", + "210": "岩手縣沿岸北部", + "211": "岩手縣沿岸å—部", + "212": "岩手縣內陸北部", + "213": "岩手縣內陸å—部", + "220": "宮城縣北部", + "221": "宮城縣å—部", + "222": "宮城縣中部", + "230": "秋田縣沿岸北部", + "231": "秋田縣沿岸å—部", + "232": "秋田縣內陸北部", + "233": "秋田縣內陸å—部", + "240": "山形縣莊內地方", + "241": "山形縣最上地方", + "242": "山形縣æ‘山地方", + "243": "山形縣置賜地方", + "250": "ç¦å³¶ç¸£ä¸­é€š", + "251": "ç¦å³¶ç¸£æ¿±é€š", + "252": "ç¦å³¶ç¸£æœƒæ´¥", + "280": "津輕海峽", + "281": "山形縣外海", + "282": "秋田縣外海", + "283": "é’æ£®ç¸£è¥¿æ–¹å¤–æµ·", + "284": "陸奥ç£", + "285": "é’æ£®ç¸£æ±æ–¹å¤–æµ·", + "286": "岩手縣外海", + "287": "宮城縣外海", + "288": "三陸外海", + "289": "ç¦å³¶ç¸£å¤–æµ·", + "300": "茨城縣北部", + "301": "茨城縣å—部", + "309": "åƒè‘‰ç¸£æ±å—外海", + "310": "櫪木縣北部", + "311": "櫪木縣å—部", + "320": "群馬縣北部", + "321": "群馬縣å—部", + "330": "埼玉縣北部", + "331": "埼玉縣å—部", + "332": "埼玉縣秩父地方", + "340": "åƒè‘‰ç¸£æ±åŒ—部", + "341": "åƒè‘‰ç¸£è¥¿åŒ—部", + "342": "åƒè‘‰ç¸£å—部", + "349": "房總åŠå³¶å—方外海", + "350": "æ±äº¬éƒ½ï¼’3å€", + "351": "æ±äº¬éƒ½å¤šæ‘©æ±éƒ¨", + "352": "æ±äº¬éƒ½å¤šæ‘©è¥¿éƒ¨", + "360": "神奈å·ç¸£æ±éƒ¨", + "361": "神奈å·ç¸£è¥¿éƒ¨", + "370": "新瀉縣上越地方", + "371": "新瀉縣中越地方", + "372": "新瀉縣下越地方", + "378": "新瀉縣下越外海", + "379": "新瀉縣上中越外海", + "380": "富山縣æ±éƒ¨", + "381": "富山縣西部", + "390": "石å·ç¸£èƒ½ç™»åœ°æ–¹", + "391": "石å·ç¸£åŠ è³€åœ°æ–¹", + "400": "ç¦äº•縣嶺北", + "401": "ç¦äº•縣嶺å—", + "411": "山梨縣中ã€è¥¿éƒ¨", + "412": "山梨縣æ±éƒ¨ã€å¯Œå£«äº”æ¹–", + "420": "長野縣北部", + "421": "長野縣中部", + "422": "長野縣å—部", + "430": "å²é˜œç¸£é£›é©’地方", + "431": "å²é˜œç¸£ç¾Žæ¿ƒæ±éƒ¨", + "432": "å²é˜œç¸£ç¾Žæ¿ƒä¸­è¥¿éƒ¨", + "440": "é™å²¡ç¸£ä¼Šè±†åœ°æ–¹", + "441": "éœå²¡ç¸£æ±éƒ¨", + "442": "éœå²¡ç¸£ä¸­éƒ¨", + "443": "éœå²¡ç¸£è¥¿éƒ¨", + "450": "愛知縣æ±éƒ¨", + "451": "愛知縣西部", + "460": "三é‡ç¸£åŒ—部", + "461": "三é‡ç¸£ä¸­éƒ¨", + "462": "三é‡ç¸£å—部", + "469": "三é‡ç¸£æ±å—外海", + "471": "茨城縣外海", + "472": "é—œæ±æ±æ–¹å¤–æµ·", + "473": "åƒè‘‰ç¸£æ±æ–¹å¤–æµ·", + "475": "å…«ä¸ˆå³¶æ±æ–¹å¤–æµ·", + "476": "八丈島近海", + "477": "æ±äº¬ç£", + "478": "相模ç£", + "480": "伊豆大島近海", + "481": "伊豆åŠå³¶æ±æ–¹å¤–æµ·", + "482": "三宅島近海", + "483": "æ–°å³¶ã€ç¥žæ´¥å³¶è¿‘æµ·", + "485": "é§¿æ²³ç£", + "486": "é§¿æ²³ç£å—方外海", + "487": "é å·žç˜", + "489": "三河ç£", + "490": "伊勢ç£", + "492": "若狭ç£", + "493": "ç¦äº•縣外海", + "494": "石å·ç¸£è¥¿æ–¹å¤–æµ·", + "495": "能登åŠå³¶å¤–æµ·", + "497": "富山ç£", + "498": "使¸¡é™„è¿‘", + "499": "æ±æµ·é“å—æ–¹å¤–æµ·", + "500": "滋賀縣北部", + "501": "滋賀縣å—部", + "510": "京都府北部", + "511": "京都府å—部", + "520": "大阪府北部", + "521": "大阪府å—部", + "530": "兵庫縣北部", + "531": "兵庫縣æ±å—部", + "532": "兵庫縣西å—部", + "540": "奈良縣", + "550": "和歌山縣北部", + "551": "和歌山縣å—部", + "560": "é³¥å–縣æ±éƒ¨", + "562": "é³¥å–縣中部", + "563": "é³¥å–縣西部", + "570": "島根縣æ±éƒ¨", + "571": "島根縣西部", + "580": "岡山縣北部", + "581": "岡山縣å—部", + "590": "廣島縣北部", + "591": "廣島縣æ±å—部", + "592": "廣島縣西å—部", + "600": "徳島縣北部", + "601": "徳島縣å—部", + "610": "香å·ç¸£æ±éƒ¨", + "611": "香å·ç¸£è¥¿éƒ¨", + "620": "愛媛縣æ±äºˆ", + "621": "愛媛縣中予", + "622": "愛媛縣å—予", + "630": "高知縣æ±éƒ¨", + "631": "高知縣中部", + "632": "高知縣西部", + "673": "土ä½ç£", + "674": "紀伊水é“", + "675": "大阪ç£", + "676": "播磨ç˜", + "677": "瀨戸內海中部", + "678": "安芸ç˜", + "679": "周防ç˜", + "680": "伊予ç˜", + "681": "è±å¾Œæ°´é“", + "682": "å±±å£ç¸£è¥¿åŒ—外海", + "683": "島根縣外海", + "684": "é³¥å–縣外海", + "685": "éš å²å³¶è¿‘æµ·", + "686": "兵庫縣北方外海", + "687": "京都府外海", + "688": "淡路島附近", + "689": "å’Œæ­Œå±±ç¸£å—æ–¹å¤–æµ·", + "700": "å±±å£ç¸£åŒ—部", + "702": "å±±å£ç¸£è¥¿éƒ¨", + "703": "å±±å£ç¸£æ±éƒ¨", + "704": "å±±å£ç¸£ä¸­éƒ¨", + "710": "ç¦å²¡ç¸£ç¦å²¡åœ°æ–¹", + "711": "ç¦å²¡ç¸£åŒ—ä¹å·žåœ°æ–¹", + "712": "ç¦å²¡ç¸£ç­‘è±åœ°æ–¹", + "713": "ç¦å²¡ç¸£ç­‘後地方", + "720": "ä½è³€ç¸£åŒ—部", + "721": "ä½è³€ç¸£å—部", + "730": "長崎縣北部", + "731": "長崎縣西å—部", + "732": "長崎縣島原åŠå³¶", + "740": "熊本縣阿蘇地方", + "741": "熊本縣熊本地方", + "742": "熊本縣çƒç£¨åœ°æ–¹", + "743": "熊本縣天è‰ã€è˜†åŒ—地方", + "750": "大分縣北部", + "751": "大分縣中部", + "752": "大分縣å—部", + "753": "大分縣西部", + "760": "宮崎縣北部平原部", + "761": "宮崎縣北部沿山", + "762": "宮崎縣å—部平原部", + "763": "宮崎縣å—部沿山", + "770": "鹿兒島縣薩摩地方", + "771": "鹿兒島縣大隅地方", + "783": "五島列島近海", + "784": "天è‰ç˜", + "785": "有明海", + "786": "橘ç£", + "787": "鹿兒島ç£", + "790": "種å­å³¶è¿‘æµ·", + "791": "æ—¥å‘ç˜", + "793": "奄美大島近海", + "795": "壹å²ã€å°é¦¬è¿‘æµ·", + "796": "ç¦å²¡ç¸£è¥¿åŒ—外海", + "797": "è–©æ‘©åŠå³¶è¥¿æ–¹å¤–æµ·", + "798": "å噶喇列島近海", + "799": "奄美大島西北外海", + "820": "大隅åŠå³¶æ±æ–¹å¤–æµ·", + "821": "ä¹å·žåœ°æ–¹æ±å—外海", + "822": "種å­å³¶æ±å—外海", + "823": "奄美大島æ±åŒ—外海", + "850": "沖繩本島近海", + "851": "å—大æ±å³¶è¿‘æµ·", + "852": "æ²–ç¹©æœ¬å³¶å—æ–¹å¤–æµ·", + "853": "å®®å¤å³¶è¿‘æµ·", + "854": "石垣島近海", + "855": "çŸ³åž£å³¶å—æ–¹å¤–æµ·", + "856": "西表島附近", + "857": "與那國島近海", + "858": "沖繩本島西北外海", + "859": "å®®å¤å³¶è¥¿åŒ—外海", + "860": "石垣島西北外海", + "900": "臺ç£é™„è¿‘", + "901": "æ±æµ·", + "902": "四國外海", + "903": "鳥島近海", + "904": "é³¥å³¶æ±æ–¹å¤–æµ·", + "905": "é„‚éœæ¬¡å…‹æµ·å—部", + "906": "庫é å³¶è¥¿æ–¹å¤–æµ·", + "907": "日本海北部", + "908": "日本海中部", + "909": "日本海西部", + "911": "父島近海", + "912": "åƒå³¶åˆ—å³¶", + "913": "åƒå³¶åˆ—å³¶æ±å—外海", + "914": "åŒ—æµ·é“æ±å—外海", + "915": "æ±åŒ—åœ°æ–¹æ±æ–¹å¤–æµ·", + "916": "å°ç¬ åŽŸè«¸å³¶è¥¿æ–¹å¤–æµ·", + "917": "硫磺島近海", + "918": "å°ç¬ åŽŸè«¸å³¶æ±æ–¹å¤–æµ·", + "919": "å—æµ·é“å—æ–¹å¤–æµ·", + "920": "è–©å—è«¸å³¶æ±æ–¹å¤–æµ·", + "921": "æœ¬å·žå—æ–¹å¤–æµ·", + "922": "庫é å³¶å—部附近", + "930": "西北太平洋", + "932": "馬里亞ç´è«¸å³¶", + "933": "黃海", + "934": "æœé®®åŠå³¶å—部", + "935": "æœé®®åŠå³¶åŒ—部", + "936": "中國æ±åŒ—部", + "937": "æµ·å‚崴附近", + "938": "西伯利亞å—部", + "939": "庫é å³¶è¿‘æµ·", + "940": "阿留申群島", + "941": "堪察加åŠå³¶é™„è¿‘", + "942": "北美西部", + "943": "北美中部", + "944": "北美æ±éƒ¨", + "945": "中美", + "946": "å—美西部", + "947": "å—美中部", + "948": "å—美æ±éƒ¨", + "949": "北æ±å¤ªå¹³æ´‹", + "950": "å—太平洋", + "951": "中å—åŠå³¶é™„è¿‘", + "952": "è²å¾‹è³“附近", + "953": "å°å°¼é™„è¿‘", + "954": "關島附近", + "955": "新幾内亞附近", + "956": "新西蘭附近", + "957": "澳洲附近", + "958": "西伯利亞附近", + "959": "俄羅斯西部", + "960": "俄羅斯中部", + "961": "ä¿„ç¾…æ–¯æ±éƒ¨", + "962": "中央亞洲", + "963": "中國西部", + "964": "中國中部", + "965": "中國æ±éƒ¨", + "966": "å°åº¦é™„è¿‘", + "967": "å°åº¦æ´‹", + "968": "中æ±", + "969": "æ­æ´²è¥¿éƒ¨", + "970": "æ­æ´²ä¸­éƒ¨", + "971": "æ­æ´²æ±éƒ¨", + "972": "地中海", + "973": "éžæ´²è¥¿éƒ¨", + "974": "éžæ´²ä¸­éƒ¨", + "975": "éžæ´²æ±éƒ¨", + "976": "北大西洋", + "977": "å—大西洋", + "978": "北極附近", + "979": "å—æ¥µé™„è¿‘", + "999": "é åœ°" + } +} \ No newline at end of file diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/AreaEpicenter/yue.json.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/AreaEpicenter/yue.json.meta new file mode 100644 index 0000000..0d70a1d --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/AreaEpicenter/yue.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 0d0df7aa39da0954fb0086cc13a9ba9e +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/AreaEpicenter/zh-Hant.json b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/AreaEpicenter/zh-Hant.json new file mode 100644 index 0000000..33ecf98 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/AreaEpicenter/zh-Hant.json @@ -0,0 +1,348 @@ +{ + "Culture": "zh-TW", + "Strings": { + "011": "北海é“地方", + "012": "æ±åŒ—地方", + "013": "北陸地方", + "014": "é–¢æ±ç”²ä¿¡åœ°æ–¹", + "015": "å°ç¬ åŽŸåœ°æ–¹", + "016": "æ±æµ·åœ°æ–¹", + "017": "近畿地方", + "018": "中国地方", + "019": "四国地方", + "020": "ä¹å·žåœ°æ–¹", + "021": "沖繩地方", + "100": "石狩地方北部", + "101": "石狩地方中部", + "102": "石狩地方å—部", + "105": "渡島地方北部", + "106": "渡島地方æ±éƒ¨", + "107": "渡島地方西部", + "110": "檜山地方", + "115": "後志地方北部", + "116": "後志地方æ±éƒ¨", + "117": "後志地方西部", + "120": "空知地方北部", + "121": "空知地方中部", + "122": "空知地方å—部", + "125": "上å·åœ°æ–¹åŒ—部", + "126": "上å·åœ°æ–¹ä¸­éƒ¨", + "127": "上å·åœ°æ–¹å—部", + "130": "ç•™èŒåœ°æ–¹ä¸­åŒ—部", + "131": "ç•™èŒåœ°æ–¹å—部", + "135": "宗谷地方北部", + "136": "宗谷地方å—部", + "140": "網走地方", + "141": "北見地方", + "142": "紋別地方", + "145": "胆振地方西部", + "146": "胆振地方中æ±éƒ¨", + "150": "日高地方西部", + "151": "日高地方中部", + "152": "日高地方æ±éƒ¨", + "155": "åå‹åœ°æ–¹åŒ—部", + "156": "åå‹åœ°æ–¹ä¸­éƒ¨", + "157": "åå‹åœ°æ–¹å—部", + "160": "釧路地方北部", + "161": "釧路地方中å—部", + "165": "根室地方北部", + "166": "根室地方中部", + "167": "根室地方å—部", + "180": "北海é“西å—外海", + "181": "北海é“西方外海", + "182": "石狩ç£", + "183": "北海é“西北外海", + "184": "宗谷海峡", + "186": "國後島附近", + "187": "擇æ‰å³¶é™„è¿‘", + "188": "åŒ—æµ·é“æ±æ–¹å¤–æµ·", + "189": "根室åŠå³¶æ±å—外海", + "190": "釧路外海", + "191": "åå‹å¤–æµ·", + "192": "浦河外海", + "193": "è‹«å°ç‰§å¤–æµ·", + "194": "内浦ç£", + "195": "å®—è°·æ±æ–¹å¤–æµ·", + "196": "網走外海", + "197": "擇æ‰å³¶æ±å—外海", + "200": "é’æ£®ç¸£æ´¥è»½åŒ—部", + "201": "é’æ£®ç¸£æ´¥è»½å—部", + "202": "é’æ£®ç¸£ä¸‰å…«ä¸ŠåŒ—地方", + "203": "é’æ£®ç¸£ä¸‹åŒ—地方", + "210": "岩手縣沿岸北部", + "211": "岩手縣沿岸å—部", + "212": "岩手縣內陸北部", + "213": "岩手縣內陸å—部", + "220": "宮城縣北部", + "221": "宮城縣å—部", + "222": "宮城縣中部", + "230": "秋田縣沿岸北部", + "231": "秋田縣沿岸å—部", + "232": "秋田縣內陸北部", + "233": "秋田縣內陸å—部", + "240": "山形縣莊內地方", + "241": "山形縣最上地方", + "242": "山形縣æ‘山地方", + "243": "山形縣置賜地方", + "250": "ç¦å³¶ç¸£ä¸­é€š", + "251": "ç¦å³¶ç¸£æ¿±é€š", + "252": "ç¦å³¶ç¸£æœƒæ´¥", + "280": "津輕海峽", + "281": "山形縣外海", + "282": "秋田縣外海", + "283": "é’æ£®ç¸£è¥¿æ–¹å¤–æµ·", + "284": "陸奥ç£", + "285": "é’æ£®ç¸£æ±æ–¹å¤–æµ·", + "286": "岩手縣外海", + "287": "宮城縣外海", + "288": "三陸外海", + "289": "ç¦å³¶ç¸£å¤–æµ·", + "300": "茨城縣北部", + "301": "茨城縣å—部", + "309": "åƒè‘‰ç¸£æ±å—外海", + "310": "櫪木縣北部", + "311": "櫪木縣å—部", + "320": "群馬縣北部", + "321": "群馬縣å—部", + "330": "埼玉縣北部", + "331": "埼玉縣å—部", + "332": "埼玉縣秩父地方", + "340": "åƒè‘‰ç¸£æ±åŒ—部", + "341": "åƒè‘‰ç¸£è¥¿åŒ—部", + "342": "åƒè‘‰ç¸£å—部", + "349": "房總åŠå³¶å—方外海", + "350": "æ±äº¬éƒ½ï¼’3å€", + "351": "æ±äº¬éƒ½å¤šæ‘©æ±éƒ¨", + "352": "æ±äº¬éƒ½å¤šæ‘©è¥¿éƒ¨", + "360": "神奈å·ç¸£æ±éƒ¨", + "361": "神奈å·ç¸£è¥¿éƒ¨", + "370": "新瀉縣上越地方", + "371": "新瀉縣中越地方", + "372": "新瀉縣下越地方", + "378": "新瀉縣下越外海", + "379": "新瀉縣上中越外海", + "380": "富山縣æ±éƒ¨", + "381": "富山縣西部", + "390": "石å·ç¸£èƒ½ç™»åœ°æ–¹", + "391": "石å·ç¸£åŠ è³€åœ°æ–¹", + "400": "ç¦äº•縣嶺北", + "401": "ç¦äº•縣嶺å—", + "411": "山梨縣中ã€è¥¿éƒ¨", + "412": "山梨縣æ±éƒ¨ã€å¯Œå£«äº”æ¹–", + "420": "長野縣北部", + "421": "長野縣中部", + "422": "長野縣å—部", + "430": "å²é˜œç¸£é£›é©’地方", + "431": "å²é˜œç¸£ç¾Žæ¿ƒæ±éƒ¨", + "432": "å²é˜œç¸£ç¾Žæ¿ƒä¸­è¥¿éƒ¨", + "440": "é™å²¡ç¸£ä¼Šè±†åœ°æ–¹", + "441": "éœå²¡ç¸£æ±éƒ¨", + "442": "éœå²¡ç¸£ä¸­éƒ¨", + "443": "éœå²¡ç¸£è¥¿éƒ¨", + "450": "愛知縣æ±éƒ¨", + "451": "愛知縣西部", + "460": "三é‡ç¸£åŒ—部", + "461": "三é‡ç¸£ä¸­éƒ¨", + "462": "三é‡ç¸£å—部", + "469": "三é‡ç¸£æ±å—外海", + "471": "茨城縣外海", + "472": "é—œæ±æ±æ–¹å¤–æµ·", + "473": "åƒè‘‰ç¸£æ±æ–¹å¤–æµ·", + "475": "å…«ä¸ˆå³¶æ±æ–¹å¤–æµ·", + "476": "八丈島近海", + "477": "æ±äº¬ç£", + "478": "相模ç£", + "480": "伊豆大島近海", + "481": "伊豆åŠå³¶æ±æ–¹å¤–æµ·", + "482": "三宅島近海", + "483": "æ–°å³¶ã€ç¥žæ´¥å³¶è¿‘æµ·", + "485": "é§¿æ²³ç£", + "486": "é§¿æ²³ç£å—方外海", + "487": "é å·žç˜", + "489": "三河ç£", + "490": "伊勢ç£", + "492": "若狭ç£", + "493": "ç¦äº•縣外海", + "494": "石å·ç¸£è¥¿æ–¹å¤–æµ·", + "495": "能登åŠå³¶å¤–æµ·", + "497": "富山ç£", + "498": "使¸¡é™„è¿‘", + "499": "æ±æµ·é“å—æ–¹å¤–æµ·", + "500": "滋賀縣北部", + "501": "滋賀縣å—部", + "510": "京都府北部", + "511": "京都府å—部", + "520": "大阪府北部", + "521": "大阪府å—部", + "530": "兵庫縣北部", + "531": "兵庫縣æ±å—部", + "532": "兵庫縣西å—部", + "540": "奈良縣", + "550": "和歌山縣北部", + "551": "和歌山縣å—部", + "560": "é³¥å–縣æ±éƒ¨", + "562": "é³¥å–縣中部", + "563": "é³¥å–縣西部", + "570": "島根縣æ±éƒ¨", + "571": "島根縣西部", + "580": "岡山縣北部", + "581": "岡山縣å—部", + "590": "廣島縣北部", + "591": "廣島縣æ±å—部", + "592": "廣島縣西å—部", + "600": "徳島縣北部", + "601": "徳島縣å—部", + "610": "香å·ç¸£æ±éƒ¨", + "611": "香å·ç¸£è¥¿éƒ¨", + "620": "愛媛縣æ±äºˆ", + "621": "愛媛縣中予", + "622": "愛媛縣å—予", + "630": "高知縣æ±éƒ¨", + "631": "高知縣中部", + "632": "高知縣西部", + "673": "土ä½ç£", + "674": "紀伊水é“", + "675": "大阪ç£", + "676": "播磨ç˜", + "677": "瀨戸內海中部", + "678": "安芸ç˜", + "679": "周防ç˜", + "680": "伊予ç˜", + "681": "è±å¾Œæ°´é“", + "682": "å±±å£ç¸£è¥¿åŒ—外海", + "683": "島根縣外海", + "684": "é³¥å–縣外海", + "685": "éš å²å³¶è¿‘æµ·", + "686": "兵庫縣北方外海", + "687": "京都府外海", + "688": "淡路島附近", + "689": "å’Œæ­Œå±±ç¸£å—æ–¹å¤–æµ·", + "700": "å±±å£ç¸£åŒ—部", + "702": "å±±å£ç¸£è¥¿éƒ¨", + "703": "å±±å£ç¸£æ±éƒ¨", + "704": "å±±å£ç¸£ä¸­éƒ¨", + "710": "ç¦å²¡ç¸£ç¦å²¡åœ°æ–¹", + "711": "ç¦å²¡ç¸£åŒ—ä¹å·žåœ°æ–¹", + "712": "ç¦å²¡ç¸£ç­‘è±åœ°æ–¹", + "713": "ç¦å²¡ç¸£ç­‘後地方", + "720": "ä½è³€ç¸£åŒ—部", + "721": "ä½è³€ç¸£å—部", + "730": "長崎縣北部", + "731": "長崎縣西å—部", + "732": "長崎縣島原åŠå³¶", + "740": "熊本縣阿蘇地方", + "741": "熊本縣熊本地方", + "742": "熊本縣çƒç£¨åœ°æ–¹", + "743": "熊本縣天è‰ã€è˜†åŒ—地方", + "750": "大分縣北部", + "751": "大分縣中部", + "752": "大分縣å—部", + "753": "大分縣西部", + "760": "宮崎縣北部平原部", + "761": "宮崎縣北部沿山", + "762": "宮崎縣å—部平原部", + "763": "宮崎縣å—部沿山", + "770": "鹿兒島縣薩摩地方", + "771": "鹿兒島縣大隅地方", + "783": "五島列島近海", + "784": "天è‰ç˜", + "785": "有明海", + "786": "橘ç£", + "787": "鹿兒島ç£", + "790": "種å­å³¶è¿‘æµ·", + "791": "æ—¥å‘ç˜", + "793": "奄美大島近海", + "795": "壹å²ã€å°é¦¬è¿‘æµ·", + "796": "ç¦å²¡ç¸£è¥¿åŒ—外海", + "797": "è–©æ‘©åŠå³¶è¥¿æ–¹å¤–æµ·", + "798": "å噶喇列島近海", + "799": "奄美大島西北外海", + "820": "大隅åŠå³¶æ±æ–¹å¤–æµ·", + "821": "ä¹å·žåœ°æ–¹æ±å—外海", + "822": "種å­å³¶æ±å—外海", + "823": "奄美大島æ±åŒ—外海", + "850": "沖繩本島近海", + "851": "å—大æ±å³¶è¿‘æµ·", + "852": "æ²–ç¹©æœ¬å³¶å—æ–¹å¤–æµ·", + "853": "å®®å¤å³¶è¿‘æµ·", + "854": "石垣島近海", + "855": "çŸ³åž£å³¶å—æ–¹å¤–æµ·", + "856": "西表島附近", + "857": "與那國島近海", + "858": "沖繩本島西北外海", + "859": "å®®å¤å³¶è¥¿åŒ—外海", + "860": "石垣島西北外海", + "900": "臺ç£é™„è¿‘", + "901": "æ±æµ·", + "902": "四國外海", + "903": "鳥島近海", + "904": "é³¥å³¶æ±æ–¹å¤–æµ·", + "905": "é„‚éœæ¬¡å…‹æµ·å—部", + "906": "庫é å³¶è¥¿æ–¹å¤–æµ·", + "907": "日本海北部", + "908": "日本海中部", + "909": "日本海西部", + "911": "父島近海", + "912": "åƒå³¶åˆ—å³¶", + "913": "åƒå³¶åˆ—å³¶æ±å—外海", + "914": "åŒ—æµ·é“æ±å—外海", + "915": "æ±åŒ—åœ°æ–¹æ±æ–¹å¤–æµ·", + "916": "å°ç¬ åŽŸè«¸å³¶è¥¿æ–¹å¤–æµ·", + "917": "硫磺島近海", + "918": "å°ç¬ åŽŸè«¸å³¶æ±æ–¹å¤–æµ·", + "919": "å—æµ·é“å—æ–¹å¤–æµ·", + "920": "è–©å—è«¸å³¶æ±æ–¹å¤–æµ·", + "921": "æœ¬å·žå—æ–¹å¤–æµ·", + "922": "庫é å³¶å—部附近", + "930": "西北太平洋", + "932": "馬里亞ç´è«¸å³¶", + "933": "黃海", + "934": "æœé®®åŠå³¶å—部", + "935": "æœé®®åŠå³¶åŒ—部", + "936": "中國æ±åŒ—部", + "937": "æµ·å‚崴附近", + "938": "西伯利亞å—部", + "939": "庫é å³¶è¿‘æµ·", + "940": "阿留申群島", + "941": "堪察加åŠå³¶é™„è¿‘", + "942": "北美西部", + "943": "北美中部", + "944": "北美æ±éƒ¨", + "945": "中美", + "946": "å—美西部", + "947": "å—美中部", + "948": "å—美æ±éƒ¨", + "949": "北æ±å¤ªå¹³æ´‹", + "950": "å—太平洋", + "951": "中å—åŠå³¶é™„è¿‘", + "952": "è²å¾‹è³“附近", + "953": "å°å°¼é™„è¿‘", + "954": "關島附近", + "955": "新幾内亞附近", + "956": "新西蘭附近", + "957": "澳洲附近", + "958": "西伯利亞附近", + "959": "俄羅斯西部", + "960": "俄羅斯中部", + "961": "ä¿„ç¾…æ–¯æ±éƒ¨", + "962": "中央亞洲", + "963": "中國西部", + "964": "中國中部", + "965": "中國æ±éƒ¨", + "966": "å°åº¦é™„è¿‘", + "967": "å°åº¦æ´‹", + "968": "中æ±", + "969": "æ­æ´²è¥¿éƒ¨", + "970": "æ­æ´²ä¸­éƒ¨", + "971": "æ­æ´²æ±éƒ¨", + "972": "地中海", + "973": "éžæ´²è¥¿éƒ¨", + "974": "éžæ´²ä¸­éƒ¨", + "975": "éžæ´²æ±éƒ¨", + "976": "北大西洋", + "977": "å—大西洋", + "978": "北極附近", + "979": "å—æ¥µé™„è¿‘", + "999": "é åœ°" + } +} \ No newline at end of file diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/AreaEpicenter/zh-Hant.json.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/AreaEpicenter/zh-Hant.json.meta new file mode 100644 index 0000000..d3b6cf8 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/AreaEpicenter/zh-Hant.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: b1ee68de5f84f38429de188f1975b3f8 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/AreaEpicenter/zh.json b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/AreaEpicenter/zh.json new file mode 100644 index 0000000..30428c9 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/AreaEpicenter/zh.json @@ -0,0 +1,348 @@ +{ + "Culture": "zh-CN", + "Strings": { + "011": "北海é“地方", + "012": "东北地方", + "013": "北陆地方", + "014": "关东甲信地方", + "015": "å°ç¬ åŽŸåœ°æ–¹", + "016": "东海地方", + "017": "近畿地方", + "018": "中国地方", + "019": "四国地方", + "020": "ä¹å·žåœ°æ–¹", + "021": "冲绳地方", + "100": "石狩地方北部", + "101": "石狩地方中部", + "102": "石狩地方å—部", + "105": "渡岛地方北部", + "106": "渡岛地方东部", + "107": "渡岛地方西部", + "110": "桧山地方", + "115": "åŽå¿—地方北部", + "116": "åŽå¿—地方东部", + "117": "åŽå¿—地方西部", + "120": "空知地方北部", + "121": "空知地方中部", + "122": "空知地方å—部", + "125": "上å·åœ°æ–¹åŒ—部", + "126": "上å·åœ°æ–¹ä¸­éƒ¨", + "127": "上å·åœ°æ–¹å—部", + "130": "ç•™èŒåœ°æ–¹ä¸­åŒ—部", + "131": "ç•™èŒåœ°æ–¹å—部", + "135": "宗谷地方北部", + "136": "宗谷地方å—部", + "140": "网走地方", + "141": "北è§åœ°æ–¹", + "142": "纹别地方", + "145": "胆振地方西部", + "146": "胆振地方中东部", + "150": "日高地方西部", + "151": "日高地方中部", + "152": "日高地方东部", + "155": "å胜地方北部", + "156": "å胜地方中部", + "157": "å胜地方å—部", + "160": "é’路地方北部", + "161": "é’路地方中å—部", + "165": "根室地方北部", + "166": "根室地方中部", + "167": "根室地方å—部", + "180": "北海é“西å—外海", + "181": "北海é“西方外海", + "182": "石狩湾", + "183": "北海é“西北外海", + "184": "宗谷海峡", + "186": "国åŽå²›é™„è¿‘", + "187": "æ‹©æ‰å²›é™„è¿‘", + "188": "北海é“东方外海", + "189": "根室åŠå²›ä¸œå—外海", + "190": "é’路外海", + "191": "å胜外海", + "192": "浦河外海", + "193": "è‹«å°ç‰§å¤–æµ·", + "194": "内浦湾", + "195": "宗谷东方外海", + "196": "网走外海", + "197": "æ‹©æ‰å²›ä¸œå—外海", + "200": "é’æ£®åŽ¿æ´¥è½»åŒ—éƒ¨", + "201": "é’æ£®åŽ¿æ´¥è½»å—部", + "202": "é’æ£®åŽ¿ä¸‰å…«ä¸ŠåŒ—åœ°æ–¹", + "203": "é’æ£®åŽ¿ä¸‹åŒ—åœ°æ–¹", + "210": "岩手县沿岸北部", + "211": "岩手县沿岸å—部", + "212": "岩手县内陆北部", + "213": "岩手县内陆å—部", + "220": "宫城县北部", + "221": "宫城县å—部", + "222": "宫城县中部", + "230": "秋田县沿岸北部", + "231": "秋田县沿岸å—部", + "232": "秋田县内陆北部", + "233": "秋田县内陆å—部", + "240": "山形县庄内地方", + "241": "山形县最上地方", + "242": "山形县æ‘山地方", + "243": "山形县置èµåœ°æ–¹", + "250": "ç¦å²›åŽ¿ä¸­é€š", + "251": "ç¦å²›åŽ¿æ»¨é€š", + "252": "ç¦å²›åŽ¿ä¼šæ´¥", + "280": "津轻海峡", + "281": "山形县外海", + "282": "秋田县外海", + "283": "é’æ£®åŽ¿è¥¿æ–¹å¤–æµ·", + "284": "陆奥湾", + "285": "é’æ£®åŽ¿ä¸œæ–¹å¤–æµ·", + "286": "岩手县外海", + "287": "宫城县外海", + "288": "三陆外海", + "289": "ç¦å²›åŽ¿å¤–æµ·", + "300": "茨城县北部", + "301": "茨城县å—部", + "309": "åƒå¶åŽ¿ä¸œå—外海", + "310": "栃木县北部", + "311": "栃木县å—部", + "320": "群马县北部", + "321": "群马县å—部", + "330": "埼玉县北部", + "331": "埼玉县å—部", + "332": "埼玉县秩父地方", + "340": "åƒå¶åŽ¿ä¸œåŒ—éƒ¨", + "341": "åƒå¶åŽ¿è¥¿åŒ—éƒ¨", + "342": "åƒå¶åŽ¿å—部", + "349": "房总åŠå²›å—方外海", + "350": "东京都23区", + "351": "东京都多摩东部", + "352": "东京都多摩西部", + "360": "神奈å·åŽ¿ä¸œéƒ¨", + "361": "神奈å·åŽ¿è¥¿éƒ¨", + "370": "新潟县上越地方", + "371": "新潟县中越地方", + "372": "新潟县下越地方", + "378": "新潟县下越外海", + "379": "新潟县上中越外海", + "380": "富山县东部", + "381": "富山县西部", + "390": "石å·åŽ¿èƒ½ç™»åœ°æ–¹", + "391": "石å·åŽ¿åŠ è´ºåœ°æ–¹", + "400": "ç¦äº•县岭北", + "401": "ç¦äº•县岭å—", + "411": "山梨县中ã€è¥¿éƒ¨", + "412": "山梨县东部ã€å¯Œå£«äº”æ¹–", + "420": "长野县北部", + "421": "长野县中部", + "422": "长野县å—部", + "430": "å²é˜œåŽ¿é£žé©’åœ°æ–¹", + "431": "å²é˜œåŽ¿ç¾Žæµ“ä¸œéƒ¨", + "432": "å²é˜œåŽ¿ç¾Žæµ“ä¸­è¥¿éƒ¨", + "440": "é™å†ˆåŽ¿ä¼Šè±†åœ°æ–¹", + "441": "é™å†ˆåŽ¿ä¸œéƒ¨", + "442": "é™å†ˆåŽ¿ä¸­éƒ¨", + "443": "é™å†ˆåŽ¿è¥¿éƒ¨", + "450": "爱知县东部", + "451": "爱知县西部", + "460": "三é‡åŽ¿åŒ—éƒ¨", + "461": "三é‡åŽ¿ä¸­éƒ¨", + "462": "三é‡åŽ¿å—部", + "469": "三é‡åŽ¿ä¸œå—外海", + "471": "茨城县外海", + "472": "关东东方外海", + "473": "åƒå¶åŽ¿ä¸œæ–¹å¤–æµ·", + "475": "八丈岛东方外海", + "476": "八丈岛近海", + "477": "东京湾", + "478": "相模湾", + "480": "伊豆大岛近海", + "481": "伊豆åŠå²›ä¸œæ–¹å¤–æµ·", + "482": "三宅岛近海", + "483": "æ–°å²›ã€ç¥žæ´¥å²›è¿‘æµ·", + "485": "éªæ²³æ¹¾", + "486": "éªæ²³æ¹¾å—方外海", + "487": "远州滩", + "489": "三河湾", + "490": "伊势湾", + "492": "若狭湾", + "493": "ç¦äº•县外海", + "494": "石å·åŽ¿è¥¿æ–¹å¤–æµ·", + "495": "能登åŠå²›å¤–æµ·", + "497": "富山湾", + "498": "使¸¡é™„è¿‘", + "499": "东海é“å—æ–¹å¤–æµ·", + "500": "滋贺县北部", + "501": "滋贺县å—部", + "510": "京都府北部", + "511": "京都府å—部", + "520": "大阪府北部", + "521": "大阪府å—部", + "530": "兵库县北部", + "531": "兵库县东å—部", + "532": "兵库县西å—部", + "540": "奈良县", + "550": "和歌山县北部", + "551": "和歌山县å—部", + "560": "鸟å–县东部", + "562": "鸟å–县中部", + "563": "鸟å–县西部", + "570": "岛根县东部", + "571": "岛根县西部", + "580": "冈山县北部", + "581": "冈山县å—部", + "590": "广岛县北部", + "591": "广岛县东å—部", + "592": "广岛县西å—部", + "600": "德岛县北部", + "601": "德岛县å—部", + "610": "香å·åŽ¿ä¸œéƒ¨", + "611": "香å·åŽ¿è¥¿éƒ¨", + "620": "爱媛县东予", + "621": "爱媛县中予", + "622": "爱媛县å—予", + "630": "高知县东部", + "631": "高知县中部", + "632": "高知县西部", + "673": "åœŸä½æ¹¾", + "674": "纪伊水é“", + "675": "大阪湾", + "676": "播磨滩", + "677": "濑户内海中部", + "678": "安艺滩", + "679": "周防滩", + "680": "伊予滩", + "681": "ä¸°åŽæ°´é“", + "682": "å±±å£åŽ¿è¥¿åŒ—å¤–æµ·", + "683": "岛根县外海", + "684": "鸟å–县外海", + "685": "éšå²å²›è¿‘æµ·", + "686": "兵库县北方外海", + "687": "京都府外海", + "688": "淡路岛附近", + "689": "å’Œæ­Œå±±åŽ¿å—æ–¹å¤–æµ·", + "700": "å±±å£åŽ¿åŒ—éƒ¨", + "702": "å±±å£åŽ¿è¥¿éƒ¨", + "703": "å±±å£åŽ¿ä¸œéƒ¨", + "704": "å±±å£åŽ¿ä¸­éƒ¨", + "710": "ç¦å†ˆåŽ¿ç¦å†ˆåœ°æ–¹", + "711": "ç¦å†ˆåŽ¿åŒ—ä¹å·žåœ°æ–¹", + "712": "ç¦å†ˆåŽ¿ç­‘ä¸°åœ°æ–¹", + "713": "ç¦å†ˆåŽ¿ç­‘åŽåœ°æ–¹", + "720": "ä½è´ºåŽ¿åŒ—éƒ¨", + "721": "ä½è´ºåŽ¿å—部", + "730": "长崎县北部", + "731": "长崎县西å—部", + "732": "长崎县岛原åŠå²›", + "740": "熊本县阿è‹åœ°æ–¹", + "741": "熊本县熊本地方", + "742": "熊本县çƒç£¨åœ°æ–¹", + "743": "熊本县天è‰ã€èŠ¦åŒ—åœ°æ–¹", + "750": "大分县北部", + "751": "大分县中部", + "752": "大分县å—部", + "753": "大分县西部", + "760": "宫崎县北部平原部", + "761": "宫崎县北部沿山", + "762": "宫崎县å—部平原部", + "763": "宫崎县å—部沿山", + "770": "é¹¿å„¿å²›åŽ¿è¨æ‘©åœ°æ–¹", + "771": "鹿儿岛县大隅地方", + "783": "五岛列岛近海", + "784": "å¤©è‰æ»©", + "785": "有明海", + "786": "橘湾", + "787": "鹿儿岛湾", + "790": "ç§å­å²›è¿‘æµ·", + "791": "æ—¥å‘æ»©", + "793": "奄美大岛近海", + "795": "壹å²ã€å¯¹é©¬è¿‘æµ·", + "796": "ç¦å†ˆåŽ¿è¥¿åŒ—å¤–æµ·", + "797": "è¨æ‘©åŠå²›è¥¿æ–¹å¤–æµ·", + "798": "å噶喇列岛近海", + "799": "奄美大岛西北外海", + "820": "大隅åŠå²›ä¸œæ–¹å¤–æµ·", + "821": "ä¹å·žåœ°æ–¹ä¸œå—外海", + "822": "ç§å­å²›ä¸œå—外海", + "823": "奄美大岛东北外海", + "850": "冲绳本岛近海", + "851": "å—大东岛近海", + "852": "å†²ç»³æœ¬å²›å—æ–¹å¤–æµ·", + "853": "宫å¤å²›è¿‘æµ·", + "854": "石垣岛近海", + "855": "çŸ³åž£å²›å—æ–¹å¤–æµ·", + "856": "西表岛附近", + "857": "与那国岛近海", + "858": "冲绳本岛西北外海", + "859": "宫å¤å²›è¥¿åŒ—外海", + "860": "石垣岛西北外海", + "900": "å°æ¹¾é™„è¿‘", + "901": "东海", + "902": "四国外海", + "903": "鸟岛近海", + "904": "鸟岛东方外海", + "905": "é„‚éœæ¬¡å…‹æµ·å—部", + "906": "库页岛西方外海", + "907": "日本海北部", + "908": "日本海中部", + "909": "日本海西部", + "911": "父岛近海", + "912": "åƒå²›åˆ—å²›", + "913": "åƒå²›åˆ—岛东å—外海", + "914": "北海é“东å—外海", + "915": "东北地方东方外海", + "916": "å°ç¬ åŽŸè¯¸å²›è¥¿æ–¹å¤–æµ·", + "917": "硫磺岛近海", + "918": "å°ç¬ åŽŸè¯¸å²›ä¸œæ–¹å¤–æµ·", + "919": "å—æµ·é“å—æ–¹å¤–æµ·", + "920": "è¨å—诸岛东方外海", + "921": "æœ¬å·žå—æ–¹å¤–æµ·", + "922": "库页岛å—部附近", + "930": "西北太平洋", + "932": "马里亚纳群岛", + "933": "黄海", + "934": "æœé²œåŠå²›å—部", + "935": "æœé²œåŠå²›åŒ—部", + "936": "中国东北部", + "937": "符拉迪沃斯托克附近", + "938": "西伯利亚å—部", + "939": "è¨å“ˆæž—è¿‘æµ·", + "940": "阿留申群岛", + "941": "堪察加åŠå²›é™„è¿‘", + "942": "北美西部", + "943": "北美中部", + "944": "北美东部", + "945": "中美", + "946": "å—美西部", + "947": "å—美中部", + "948": "å—美东部", + "949": "东北太平洋", + "950": "å—太平洋", + "951": "中å—åŠå²›é™„è¿‘", + "952": "è²å¾‹å®¾é™„è¿‘", + "953": "å°åº¦å°¼è¥¿äºšé™„è¿‘", + "954": "关岛附近", + "955": "新几内亚附近", + "956": "新西兰附近", + "957": "澳大利亚附近", + "958": "西伯利亚附近", + "959": "俄罗斯西部", + "960": "俄罗斯中部", + "961": "俄罗斯东部", + "962": "中央亚洲", + "963": "中国西部", + "964": "中国中部", + "965": "中国东部", + "966": "å°åº¦é™„è¿‘", + "967": "å°åº¦æ´‹", + "968": "中东", + "969": "欧洲西部", + "970": "欧洲中部", + "971": "欧洲东部", + "972": "地中海", + "973": "éžæ´²è¥¿éƒ¨", + "974": "éžæ´²ä¸­éƒ¨", + "975": "éžæ´²ä¸œéƒ¨", + "976": "北大西洋", + "977": "å—大西洋", + "978": "北æžé™„è¿‘", + "979": "å—æžé™„è¿‘", + "999": "远地" + } +} \ No newline at end of file diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/AreaEpicenter/zh.json.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/AreaEpicenter/zh.json.meta new file mode 100644 index 0000000..38f6cbf --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/AreaEpicenter/zh.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 2375ba10462ef664fa4082e363edeab7 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/AreaForecastEEW.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/AreaForecastEEW.meta new file mode 100644 index 0000000..eb91570 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/AreaForecastEEW.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3cfccce8789136849a200d729977c9a1 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/AreaForecastEEW/en.json b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/AreaForecastEEW/en.json new file mode 100644 index 0000000..39cc924 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/AreaForecastEEW/en.json @@ -0,0 +1,263 @@ +{ + "Culture": "en-US", + "Strings": { + "100": "Northern Ishikari Region, Hokkaido", + "101": "Central Ishikari Region, Hokkaido", + "102": "Southern Ishikari Region, Hokkaido", + "105": "Northern Oshima Region, Hokkaido", + "106": "Eastern Oshima Region, Hokkaido", + "107": "Western Oshima Region, Hokkaido", + "110": "Hiyama Region, Hokkaido", + "115": "Northern Shiribeshi Region, Hokkaido", + "116": "Eastern Shiribeshi Region, Hokkaido", + "117": "Western Shiribeshi Region, Hokkaido", + "119": "Okushirito Island, Hokkaido", + "120": "Northern Sorachi Region, Hokkaido", + "121": "Central Sorachi Region, Hokkaido", + "122": "Southern Sorachi Region, Hokkaido", + "125": "Northern Kamikawa Region, Hokkaido", + "126": "Central Kamikawa Region, Hokkaido", + "127": "Southern Kamikawa Region, Hokkaido", + "130": "Central and northern Rumoi Region, Hokkaido", + "131": "Southern Rumoi Region, Hokkaido", + "135": "Northern Soya Region, Hokkaido", + "136": "Southern Soya Region, Hokkaido", + "139": "Rishiri and Rebun, Hokkaido", + "140": "Abashiri Region, Hokkaido", + "141": "Kitami Region, Hokkaido", + "142": "Mombetsu Region, Hokkaido", + "145": "Western Iburi Region, Hokkaido", + "146": "Central and eastern Iburi Region, Hokkaido", + "150": "Western Hidaka Region, Hokkaido", + "151": "Central Hidaka Region, Hokkaido", + "152": "Eastern Hidaka Region, Hokkaido", + "155": "Northern Tokachi Region, Hokkaido", + "156": "Central Tokachi Region, Hokkaido", + "157": "Southern Tokachi Region, Hokkaido", + "160": "Northern Kushiro Region, Hokkaido", + "161": "Central and southern Kushiro Region, Hokkaido", + "165": "Northern Nemuro Region, Hokkaido", + "166": "Central Nemuro Region, Hokkaido", + "167": "Southern Nemuro Region, Hokkaido", + "200": "Northern Tsugaru, Aomori Prefecture", + "201": "Southern Tsugaru, Aomori Prefecture", + "202": "Sanpachi-Kamikita, Aomori Prefecture", + "203": "Shimokita, Aomori Prefecture", + "210": "Northern Coast, Iwate Prefecture", + "211": "Southern Coast, Iwate Prefecture", + "212": "Northern Inland, Iwate Prefecture", + "213": "Southern Inland, Iwate Prefecture", + "220": "Northern Miyagi Prefecture", + "221": "Southern Miyagi Prefecture", + "222": "Central Miyagi Prefecture", + "230": "Northern Coast, Akita Prefecture", + "231": "Southern Coast, Akita Prefecture", + "232": "Northern Inland, Akita Prefecture", + "233": "Southern Inland, Akita Prefecture", + "240": "Shonai, Yamagata Prefecture", + "241": "Mogami, Yamagata Prefecture", + "242": "Murayama, Yamagata Prefecture", + "243": "Okitama, Yamagata Prefecture", + "250": "Nakadori, Fukushima Prefecture", + "251": "Hamadori, Fukushima Prefecture", + "252": "Aizu, Fukushima Prefecture", + "300": "Northern Ibaraki Prefecture", + "301": "Southern Ibaraki Prefecture", + "310": "Northern Tochigi Prefecture", + "311": "Southern Tochigi Prefecture", + "320": "Northern Gunma Prefecture", + "321": "Southern Gunma Prefecture", + "330": "Northern Saitama Prefecture", + "331": "Southern Saitama Prefecture", + "332": "Chichibu, Saitama Prefecture", + "340": "Northeastern Chiba Prefecture", + "341": "Northwestern Chiba Prefecture", + "342": "Southern Chiba Prefecture", + "350": "23 Wards, Tokyo", + "351": "Eastern Tama, Tokyo", + "352": "Western Tama, Tokyo", + "354": "Kozushima Island, Tokyo", + "355": "Izu-Oshima Island, Tokyo", + "356": "Niijima Island, Tokyo", + "357": "Miyakejima Island, Tokyo", + "358": "Hachijojima Island, Tokyo", + "359": "Ogasawara, Tokyo", + "360": "Eastern Kanagawa Prefecture", + "361": "Western Kanagawa Prefecture", + "370": "Joetsu, Niigata Prefecture", + "371": "Chuetsu, Niigata Prefecture", + "372": "Kaetsu, Niigata Prefecture", + "375": "Sado, Niigata Prefecture", + "380": "Eastern Toyama Prefecture", + "381": "Western Toyama Prefecture", + "390": "Noto, Ishikawa Prefecture", + "391": "Kaga, Ishikawa Prefecture", + "400": "Reihoku, Fukui Prefecture", + "401": "Reinan, Fukui Prefecture", + "411": "Central · Western Yamanashi Prefecture", + "412": "Eastern Region · Fuji Five Lakes, Yamanashi Prefecture", + "420": "Northern Nagano Prefecture", + "421": "Central Nagano Prefecture", + "422": "Southern Nagano Prefecture", + "430": "Hida, Gifu Prefecture", + "431": "Eastern Mino, Gifu Prefecture", + "432": "Central and western Mino, Gifu Prefecture", + "440": "Izu, Shizuoka Prefecture", + "441": "Eastern Shizuoka Prefecture", + "442": "Central Shizuoka Prefecture", + "443": "Western Shizuoka Prefecture", + "450": "Eastern Aichi Prefecture", + "451": "Western Aichi Prefecture", + "460": "Northern Mie Prefecture", + "461": "Central Mie Prefecture", + "462": "Southern Mie Prefecture", + "500": "Northern Shiga Prefecture", + "501": "Southern Shiga Prefecture", + "510": "Northern Kyoto Prefecture", + "511": "Southern Kyoto Prefecture", + "520": "Northern Osaka Prefecture", + "521": "Southern Osaka Prefecture", + "530": "Northern Hyogo Prefecture", + "531": "Southeastern Hyogo Prefecture", + "532": "Southwestern Hyogo Prefecture", + "535": "Awajishima, Hyogo Prefecture", + "540": "Nara Prefecture", + "550": "Northern Wakayama Prefecture", + "551": "Southern Wakayama Prefecture", + "560": "Eastern Tottori Prefecture", + "562": "Central Tottori Prefecture", + "563": "Western Tottori Prefecture", + "570": "Eastern Shimane Prefecture", + "571": "Western Shimane Prefecture", + "575": "Oki, Shimane Prefecture", + "580": "Northern Okayama Prefecture", + "581": "Southern Okayama Prefecture", + "590": "Northern Hiroshima Prefecture", + "591": "Southeastern Hiroshima Prefecture", + "592": "Southwestern Hiroshima Prefecture", + "600": "Northern Tokushima Prefecture", + "601": "Southern Tokushima Prefecture", + "610": "Eastern Kagawa Prefecture", + "611": "Western Kagawa Prefecture", + "620": "Toyo, Ehime Prefecture", + "621": "Chuyo, Ehime Prefecture", + "622": "Nan-yo, Ehime Prefecture", + "630": "Eastern Kochi Prefecture", + "631": "Central Kochi Prefecture", + "632": "Western Kochi Prefecture", + "700": "Northern Yamaguchi Prefecture", + "702": "Western Yamaguchi Prefecture", + "703": "Eastern Yamaguchi Prefecture", + "704": "Central Yamaguchi Prefecture", + "710": "Fukuoka, Fukuoka Prefecture", + "711": "Kitakyushu, Fukuoka Prefecture", + "712": "Chikuho, Fukuoka Prefecture", + "713": "Chikugo, Fukuoka Prefecture", + "720": "Northern Saga Prefecture", + "721": "Southern Saga Prefecture", + "730": "Northern Nagasaki Prefecture", + "731": "Southwestern Nagasaki Prefecture", + "732": "Shimabara Peninsula, Nagasaki Prefecture", + "735": "Tsushima, Nagasaki Prefecture", + "736": "Iki, Nagasaki Prefecture", + "737": "Goto, Nagasaki Prefecture", + "740": "Aso, Kumamoto Prefecture", + "741": "Kumamoto, Kumamoto Prefecture", + "742": "Kuma, Kumamoto Prefecture", + "743": "Amakusa and Ashikita, Kumamoto Prefecture", + "750": "Northern Oita Prefecture", + "751": "Central Oita Prefecture", + "752": "Southern Oita Prefecture", + "753": "Western Oita Prefecture", + "760": "Plain Area of northern Miyazaki Prefecture", + "761": "Area along mountains of northern Miyazaki Prefecture", + "762": "Plain Area of southern Miyazaki Prefecture", + "763": "Area along mountains of southern Miyazaki Prefecture", + "770": "Satsuma, Kagoshima Prefecture", + "771": "Osumi, Kagoshima Prefecture", + "774": "Toshima Village, Kagoshima Prefecture", + "775": "Koshikishima Islands, Kagoshima Prefecture", + "776": "Tanegashima Island, Kagoshima Prefecture", + "777": "Yakushima Island, Kagoshima Prefecture", + "778": "Northern Amami, Kagoshima Prefecture", + "779": "Southern Amami, Kagoshima Prefecture", + "800": "Northern Main Island, Okinawa Prefecture", + "801": "Central and southern Main Island, Okinawa Prefecture", + "802": "Kumejima Island, Okinawa Prefecture", + "803": "Daitojima Island, Okinawa Prefecture", + "804": "Miyakojima Island, Okinawa Prefecture", + "805": "Ishigakijima Island, Okinawa Prefecture", + "806": "Yonagunijima Island, Okinawa Prefecture", + "807": "Iriomotejima Island, Okinawa Prefecture", + "9011": "Central Area of Hokkaido (Do'o)", + "9012": "Southern Area of Hokkaido (Donan)", + "9013": "Northern Area of Hokkaido (Dohoku)", + "9014": "Eastern Area of Hokkaido (Doto)", + "9020": "Aomori", + "9030": "Iwate", + "9040": "Miyagi", + "9050": "Akita", + "9060": "Yamagata", + "9070": "Fukushima", + "9080": "Ibaraki", + "9090": "Tochigi", + "9100": "Gunma", + "9110": "Saitama", + "9120": "Chiba", + "9131": "Tokyo", + "9132": "Izu Islands", + "9133": "Ogasawara", + "9140": "Kanagawa", + "9150": "Niigata", + "9160": "Toyama", + "9170": "Ishikawa", + "9180": "Fukui", + "9190": "Yamanashi", + "9200": "Nagano", + "9210": "Gifu", + "9220": "Shizuoka", + "9230": "Aichi", + "9240": "Mie", + "9250": "Shiga", + "9260": "Kyoto", + "9270": "Osaka", + "9280": "Hyogo", + "9290": "Nara", + "9300": "Wakayama", + "9310": "Tottori", + "9320": "Shimane", + "9330": "Okayama", + "9340": "Hiroshima", + "9350": "Yamaguchi", + "9360": "Tokushima", + "9370": "Kagawa", + "9380": "Ehime", + "9390": "Kochi", + "9400": "Fukuoka", + "9410": "Saga", + "9420": "Nagasaki", + "9430": "Kumamoto", + "9440": "Oita", + "9450": "Miyazaki", + "9461": "Kagoshima", + "9462": "Amami (Islands)", + "9471": "Okinawa Main Island", + "9472": "Daitojima Island", + "9473": "Miyakojima Island", + "9474": "Yaeyama", + "9910": "Hokkaido", + "9920": "Tohoku", + "9931": "Kanto", + "9932": "Izu Islands", + "9933": "Ogasawara", + "9934": "Hokuriku", + "9935": "Koshin", + "9936": "Tokai", + "9941": "Kinki", + "9942": "Chugoku", + "9943": "Shikoku", + "9951": "Kyushu", + "9952": "Amami (Islands)", + "9960": "Okinawa" + } +} \ No newline at end of file diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/AreaForecastEEW/en.json.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/AreaForecastEEW/en.json.meta new file mode 100644 index 0000000..a3c738a --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/AreaForecastEEW/en.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: f926601754bcf6541af05db1093d5e43 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/AreaForecastEEW/und.json b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/AreaForecastEEW/und.json new file mode 100644 index 0000000..bcb56dd --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/AreaForecastEEW/und.json @@ -0,0 +1,263 @@ +{ + "Culture": "ja-JP", + "Strings": { + "100": "石狩地方北部", + "101": "石狩地方中部", + "102": "石狩地方å—部", + "105": "渡島地方北部", + "106": "渡島地方æ±éƒ¨", + "107": "渡島地方西部", + "110": "檜山地方", + "115": "後志地方北部", + "116": "後志地方æ±éƒ¨", + "117": "後志地方西部", + "119": "北海é“奥尻島", + "120": "空知地方北部", + "121": "空知地方中部", + "122": "空知地方å—部", + "125": "上å·åœ°æ–¹åŒ—部", + "126": "上å·åœ°æ–¹ä¸­éƒ¨", + "127": "上å·åœ°æ–¹å—部", + "130": "ç•™èŒåœ°æ–¹ä¸­åŒ—部", + "131": "ç•™èŒåœ°æ–¹å—部", + "135": "宗谷地方北部", + "136": "宗谷地方å—部", + "139": "北海é“利尻礼文", + "140": "網走地方", + "141": "北見地方", + "142": "紋別地方", + "145": "胆振地方西部", + "146": "胆振地方中æ±éƒ¨", + "150": "日高地方西部", + "151": "日高地方中部", + "152": "日高地方æ±éƒ¨", + "155": "åå‹åœ°æ–¹åŒ—部", + "156": "åå‹åœ°æ–¹ä¸­éƒ¨", + "157": "åå‹åœ°æ–¹å—部", + "160": "釧路地方北部", + "161": "釧路地方中å—部", + "165": "根室地方北部", + "166": "根室地方中部", + "167": "根室地方å—部", + "200": "é’æ£®çœŒæ´¥è»½åŒ—部", + "201": "é’æ£®çœŒæ´¥è»½å—部", + "202": "é’æ£®çœŒä¸‰å…«ä¸ŠåŒ—", + "203": "é’æ£®çœŒä¸‹åŒ—", + "210": "岩手県沿岸北部", + "211": "岩手県沿岸å—部", + "212": "岩手県内陸北部", + "213": "岩手県内陸å—部", + "220": "宮城県北部", + "221": "宮城県å—部", + "222": "宮城県中部", + "230": "秋田県沿岸北部", + "231": "秋田県沿岸å—部", + "232": "秋田県内陸北部", + "233": "秋田県内陸å—部", + "240": "山形県庄内", + "241": "山形県最上", + "242": "山形県æ‘å±±", + "243": "山形県置賜", + "250": "ç¦å³¶çœŒä¸­é€šã‚Š", + "251": "ç¦å³¶çœŒæµœé€šã‚Š", + "252": "ç¦å³¶çœŒä¼šæ´¥", + "300": "茨城県北部", + "301": "茨城県å—部", + "310": "栃木県北部", + "311": "栃木県å—部", + "320": "群馬県北部", + "321": "群馬県å—部", + "330": "埼玉県北部", + "331": "埼玉県å—部", + "332": "埼玉県秩父", + "340": "åƒè‘‰çœŒåŒ—æ±éƒ¨", + "341": "åƒè‘‰çœŒåŒ—西部", + "342": "åƒè‘‰çœŒå—部", + "350": "æ±äº¬éƒ½ï¼’3区", + "351": "æ±äº¬éƒ½å¤šæ‘©æ±éƒ¨", + "352": "æ±äº¬éƒ½å¤šæ‘©è¥¿éƒ¨", + "354": "神津島", + "355": "伊豆大島", + "356": "æ–°å³¶", + "357": "三宅島", + "358": "八丈島", + "359": "å°ç¬ åŽŸ", + "360": "神奈å·çœŒæ±éƒ¨", + "361": "神奈å·çœŒè¥¿éƒ¨", + "370": "新潟県上越", + "371": "新潟県中越", + "372": "新潟県下越", + "375": "æ–°æ½ŸçœŒä½æ¸¡", + "380": "富山県æ±éƒ¨", + "381": "富山県西部", + "390": "石å·çœŒèƒ½ç™»", + "391": "石å·çœŒåŠ è³€", + "400": "ç¦äº•県嶺北", + "401": "ç¦äº•県嶺å—", + "411": "山梨県中・西部", + "412": "山梨県æ±éƒ¨ãƒ»å¯Œå£«äº”æ¹–", + "420": "長野県北部", + "421": "長野県中部", + "422": "長野県å—部", + "430": "å²é˜œçœŒé£›é¨¨", + "431": "å²é˜œçœŒç¾Žæ¿ƒæ±éƒ¨", + "432": "å²é˜œçœŒç¾Žæ¿ƒä¸­è¥¿éƒ¨", + "440": "é™å²¡çœŒä¼Šè±†", + "441": "é™å²¡çœŒæ±éƒ¨", + "442": "é™å²¡çœŒä¸­éƒ¨", + "443": "é™å²¡çœŒè¥¿éƒ¨", + "450": "愛知県æ±éƒ¨", + "451": "愛知県西部", + "460": "三é‡çœŒåŒ—部", + "461": "三é‡çœŒä¸­éƒ¨", + "462": "三é‡çœŒå—部", + "500": "滋賀県北部", + "501": "滋賀県å—部", + "510": "京都府北部", + "511": "京都府å—部", + "520": "大阪府北部", + "521": "大阪府å—部", + "530": "兵庫県北部", + "531": "å…µåº«çœŒå—æ±éƒ¨", + "532": "兵庫県å—西部", + "535": "兵庫県淡路島", + "540": "奈良県", + "550": "和歌山県北部", + "551": "和歌山県å—部", + "560": "é³¥å–県æ±éƒ¨", + "562": "é³¥å–県中部", + "563": "é³¥å–県西部", + "570": "島根県æ±éƒ¨", + "571": "島根県西部", + "575": "島根県隠å²", + "580": "岡山県北部", + "581": "岡山県å—部", + "590": "広島県北部", + "591": "åºƒå³¶çœŒå—æ±éƒ¨", + "592": "広島県å—西部", + "600": "徳島県北部", + "601": "徳島県å—部", + "610": "香å·çœŒæ±éƒ¨", + "611": "香å·çœŒè¥¿éƒ¨", + "620": "愛媛県æ±äºˆ", + "621": "愛媛県中予", + "622": "愛媛県å—予", + "630": "高知県æ±éƒ¨", + "631": "高知県中部", + "632": "高知県西部", + "700": "å±±å£çœŒåŒ—部", + "702": "å±±å£çœŒè¥¿éƒ¨", + "703": "å±±å£çœŒæ±éƒ¨", + "704": "å±±å£çœŒä¸­éƒ¨", + "710": "ç¦å²¡çœŒç¦å²¡", + "711": "ç¦å²¡çœŒåŒ—ä¹å·ž", + "712": "ç¦å²¡çœŒç­‘豊", + "713": "ç¦å²¡çœŒç­‘後", + "720": "ä½è³€çœŒåŒ—部", + "721": "ä½è³€çœŒå—部", + "730": "長崎県北部", + "731": "長崎県å—西部", + "732": "長崎県島原åŠå³¶", + "735": "長崎県対馬", + "736": "長崎県壱å²", + "737": "長崎県五島", + "740": "熊本県阿蘇", + "741": "熊本県熊本", + "742": "熊本県çƒç£¨", + "743": "熊本県天è‰ãƒ»èŠ¦åŒ—", + "750": "大分県北部", + "751": "大分県中部", + "752": "大分県å—部", + "753": "大分県西部", + "760": "宮崎県北部平野部", + "761": "宮崎県北部山沿ã„", + "762": "宮崎県å—部平野部", + "763": "宮崎県å—部山沿ã„", + "770": "鹿å…島県薩摩", + "771": "鹿å…島県大隅", + "774": "鹿å…島県åå³¶æ‘", + "775": "鹿å…島県甑島", + "776": "鹿å…島県種å­å³¶", + "777": "鹿å…島県屋久島", + "778": "鹿å…島県奄美北部", + "779": "鹿å…島県奄美å—部", + "800": "沖縄県本島北部", + "801": "沖縄県本島中å—部", + "802": "沖縄県久米島", + "803": "沖縄県大æ±å³¶", + "804": "沖縄県宮å¤å³¶", + "805": "沖縄県石垣島", + "806": "沖縄県与那国島", + "807": "沖縄県西表島", + "9011": "北海é“é“央", + "9012": "北海é“é“å—", + "9013": "北海é“é“北", + "9014": "北海é“铿±", + "9020": "é’æ£®çœŒ", + "9030": "岩手県", + "9040": "宮城県", + "9050": "秋田県", + "9060": "山形県", + "9070": "ç¦å³¶çœŒ", + "9080": "茨城県", + "9090": "栃木県", + "9100": "群馬県", + "9110": "埼玉県", + "9120": "åƒè‘‰çœŒ", + "9131": "æ±äº¬éƒ½", + "9132": "伊豆諸島", + "9133": "å°ç¬ åŽŸ", + "9140": "神奈å·çœŒ", + "9150": "新潟県", + "9160": "富山県", + "9170": "石å·çœŒ", + "9180": "ç¦äº•県", + "9190": "山梨県", + "9200": "長野県", + "9210": "å²é˜œçœŒ", + "9220": "é™å²¡çœŒ", + "9230": "愛知県", + "9240": "三é‡çœŒ", + "9250": "滋賀県", + "9260": "京都府", + "9270": "大阪府", + "9280": "兵庫県", + "9290": "奈良県", + "9300": "和歌山県", + "9310": "é³¥å–県", + "9320": "島根県", + "9330": "岡山県", + "9340": "広島県", + "9350": "å±±å£çœŒ", + "9360": "徳島県", + "9370": "香å·çœŒ", + "9380": "愛媛県", + "9390": "高知県", + "9400": "ç¦å²¡çœŒ", + "9410": "ä½è³€çœŒ", + "9420": "長崎県", + "9430": "熊本県", + "9440": "大分県", + "9450": "宮崎県", + "9461": "鹿å…島県", + "9462": "奄美群島", + "9471": "沖縄本島", + "9472": "大æ±å³¶", + "9473": "å®®å¤å³¶", + "9474": "å…«é‡å±±", + "9910": "北海é“", + "9920": "æ±åŒ—地方", + "9931": "é–¢æ±åœ°æ–¹", + "9932": "伊豆諸島", + "9933": "å°ç¬ åŽŸ", + "9934": "北陸地方", + "9935": "甲信地方", + "9936": "æ±æµ·åœ°æ–¹", + "9941": "近畿地方", + "9942": "中国地方", + "9943": "四国地方", + "9951": "ä¹å·žåœ°æ–¹", + "9952": "奄美群島", + "9960": "沖縄地方" + } +} \ No newline at end of file diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/AreaForecastEEW/und.json.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/AreaForecastEEW/und.json.meta new file mode 100644 index 0000000..209fbf5 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/AreaForecastEEW/und.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 5e870cb5a44c1014e9b0642d2780a12f +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/AreaForecastEEW/yue.json b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/AreaForecastEEW/yue.json new file mode 100644 index 0000000..7301296 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/AreaForecastEEW/yue.json @@ -0,0 +1,263 @@ +{ + "Culture": "yue-HK", + "Strings": { + "100": "石狩地方北部", + "101": "石狩地方中部", + "102": "石狩地方å—部", + "105": "渡島地方北部", + "106": "渡島地方æ±éƒ¨", + "107": "渡島地方西部", + "110": "檜山地方", + "115": "後志地方北部", + "116": "後志地方æ±éƒ¨", + "117": "後志地方西部", + "119": "北海é“奥尻島", + "120": "空知地方北部", + "121": "空知地方中部", + "122": "空知地方å—部", + "125": "上å·åœ°æ–¹åŒ—部", + "126": "上å·åœ°æ–¹ä¸­éƒ¨", + "127": "上å·åœ°æ–¹å—部", + "130": "ç•™èŒåœ°æ–¹ä¸­åŒ—部", + "131": "ç•™èŒåœ°æ–¹å—部", + "135": "宗谷地方北部", + "136": "宗谷地方å—部", + "139": "北海é“利尻礼文", + "140": "網走地方", + "141": "北見地方", + "142": "紋別地方", + "145": "胆振地方西部", + "146": "胆振地方中æ±éƒ¨", + "150": "日高地方西部", + "151": "日高地方中部", + "152": "日高地方æ±éƒ¨", + "155": "åå‹åœ°æ–¹åŒ—部", + "156": "åå‹åœ°æ–¹ä¸­éƒ¨", + "157": "åå‹åœ°æ–¹å—部", + "160": "釧路地方北部", + "161": "釧路地方中å—部", + "165": "根室地方北部", + "166": "根室地方中部", + "167": "根室地方å—部", + "200": "é’æ£®ç¸£æ´¥è¼•北部", + "201": "é’æ£®ç¸£æ´¥è¼•å—部", + "202": "é’æ£®ç¸£ä¸‰å…«ä¸ŠåŒ—", + "203": "é’æ£®ç¸£ä¸‹åŒ—", + "210": "岩手縣沿岸北部", + "211": "岩手縣沿岸å—部", + "212": "岩手縣內陸北部", + "213": "岩手縣內陸å—部", + "220": "宮城縣北部", + "221": "宮城縣å—部", + "222": "宮城縣中部", + "230": "秋田縣沿岸北部", + "231": "秋田縣沿岸å—部", + "232": "秋田縣內陸北部", + "233": "秋田縣內陸å—部", + "240": "山形縣庄內", + "241": "山形縣最上", + "242": "山形縣æ‘å±±", + "243": "山形縣置賜", + "250": "ç¦å³¶ç¸£ä¸­é€š", + "251": "ç¦å³¶ç¸£æ¿±é€š", + "252": "ç¦å³¶çœŒä¼šæ´¥", + "300": "茨城縣北部", + "301": "茨城縣å—部", + "310": "栃木縣北部", + "311": "栃木縣å—部", + "320": "群馬縣北部", + "321": "群馬縣å—部", + "330": "埼玉縣北部", + "331": "埼玉縣å—部", + "332": "埼玉縣秩父", + "340": "åƒè‘‰ç¸£æ±åŒ—部", + "341": "åƒè‘‰ç¸£è¥¿åŒ—部", + "342": "åƒè‘‰ç¸£å—部", + "350": "æ±äº¬éƒ½ï¼’3å€", + "351": "æ±äº¬éƒ½å¤šæ‘©æ±éƒ¨", + "352": "æ±äº¬éƒ½å¤šæ‘©è¥¿éƒ¨", + "354": "神津島", + "355": "伊豆大島", + "356": "æ–°å³¶", + "357": "三宅島", + "358": "八丈島", + "359": "å°ç¬ åŽŸ", + "360": "神奈å·ç¸£æ±éƒ¨", + "361": "神奈å·ç¸£è¥¿éƒ¨", + "370": "新瀉縣上越", + "371": "新瀉縣中越", + "372": "新瀉縣下越", + "375": "æ–°ç€‰ç¸£ä½æ¸¡", + "380": "富山縣æ±éƒ¨", + "381": "富山縣西部", + "390": "石å·ç¸£èƒ½ç™»", + "391": "石å·ç¸£åŠ è³€", + "400": "ç¦äº•縣嶺北", + "401": "ç¦äº•縣嶺å—", + "411": "山梨縣中ã€è¥¿éƒ¨", + "412": "山梨縣æ±éƒ¨ã€å¯Œå£«äº”æ¹–", + "420": "長野縣北部", + "421": "長野縣中部", + "422": "長野縣å—部", + "430": "å²é˜œç¸£é£›é¨¨", + "431": "å²é˜œç¸£ç¾Žæ¿ƒæ±éƒ¨", + "432": "å²é˜œç¸£ç¾Žæ¿ƒä¸­è¥¿éƒ¨", + "440": "éœå²¡ç¸£ä¼Šè±†", + "441": "éœå²¡ç¸£æ±éƒ¨", + "442": "éœå²¡ç¸£ä¸­éƒ¨", + "443": "éœå²¡ç¸£è¥¿éƒ¨", + "450": "愛知縣æ±éƒ¨", + "451": "愛知縣西部", + "460": "三é‡ç¸£åŒ—部", + "461": "三é‡ç¸£ä¸­éƒ¨", + "462": "三é‡ç¸£å—部", + "500": "滋賀縣北部", + "501": "滋賀縣å—部", + "510": "京都府北部", + "511": "京都府å—部", + "520": "大阪府北部", + "521": "大阪府å—部", + "530": "兵庫縣北部", + "531": "兵庫縣æ±å—部", + "532": "兵庫縣西å—部", + "535": "兵庫縣淡路島", + "540": "奈良縣", + "550": "和歌山縣北部", + "551": "和歌山縣å—部", + "560": "é³¥å–縣æ±éƒ¨", + "562": "é³¥å–縣中部", + "563": "é³¥å–縣西部", + "570": "島根縣æ±éƒ¨", + "571": "島根縣西部", + "575": "島根縣隠å²", + "580": "岡山縣北部", + "581": "岡山縣å—部", + "590": "廣島縣北部", + "591": "廣島縣æ±å—部", + "592": "廣島縣西å—部", + "600": "徳島縣北部", + "601": "徳島縣å—部", + "610": "香å·ç¸£æ±éƒ¨", + "611": "香å·ç¸£è¥¿éƒ¨", + "620": "愛媛縣æ±äºˆ", + "621": "愛媛縣中予", + "622": "愛媛縣å—予", + "630": "高知縣æ±éƒ¨", + "631": "高知縣中部", + "632": "高知縣西部", + "700": "å±±å£ç¸£åŒ—部", + "702": "å±±å£ç¸£è¥¿éƒ¨", + "703": "å±±å£ç¸£æ±éƒ¨", + "704": "å±±å£ç¸£ä¸­éƒ¨", + "710": "ç¦å²¡ç¸£ç¦å²¡", + "711": "ç¦å²¡ç¸£åŒ—ä¹å·ž", + "712": "ç¦å²¡ç¸£ç­‘è±", + "713": "ç¦å²¡ç¸£ç­‘後", + "720": "ä½è³€ç¸£åŒ—部", + "721": "ä½è³€ç¸£å—部", + "730": "長崎縣北部", + "731": "長崎縣西å—部", + "732": "長崎縣島原åŠå³¶", + "735": "長崎縣å°é¦¬", + "736": "長崎縣壹å²", + "737": "長崎縣五島", + "740": "熊本縣阿蘇", + "741": "熊本縣熊本", + "742": "熊本縣çƒç£¨", + "743": "熊本縣天è‰ã€èŠ¦åŒ—", + "750": "大分縣北部", + "751": "大分縣中部", + "752": "大分縣å—部", + "753": "大分縣西部", + "760": "宮崎縣北部平原部", + "761": "宮崎縣北部沿山", + "762": "宮崎縣å—部平原部", + "763": "宮崎縣å—部沿山", + "770": "鹿兒島縣薩摩", + "771": "鹿兒島縣大隅", + "774": "鹿兒島縣åå³¶æ‘", + "775": "鹿兒島縣甑島", + "776": "鹿兒島縣種å­å³¶", + "777": "鹿兒島縣屋久島", + "778": "鹿兒島縣奄美北部", + "779": "鹿兒島縣奄美å—部", + "800": "沖繩縣本島北部", + "801": "沖繩縣本島中å—部", + "802": "沖繩縣久米島", + "803": "沖繩縣大æ±å³¶", + "804": "沖繩縣宮å¤å³¶", + "805": "沖繩縣石垣島", + "806": "沖繩縣與那國島", + "807": "沖繩縣西表島", + "9011": "北海é“é“央", + "9012": "北海é“é“å—", + "9013": "北海é“é“北", + "9014": "北海é“铿±", + "9020": "é’æ£®ç¸£", + "9030": "岩手縣", + "9040": "宮城縣", + "9050": "秋田縣", + "9060": "山形縣", + "9070": "ç¦å³¶ç¸£", + "9080": "茨城縣", + "9090": "栃木縣", + "9100": "群馬縣", + "9110": "埼玉縣", + "9120": "åƒè‘‰ç¸£", + "9131": "æ±äº¬éƒ½", + "9132": "伊豆諸島", + "9133": "å°ç¬ åŽŸ", + "9140": "神奈å·ç¸£", + "9150": "新潟縣", + "9160": "富山縣", + "9170": "石å·ç¸£", + "9180": "ç¦äº•縣", + "9190": "山梨縣", + "9200": "長野縣", + "9210": "å²é˜œç¸£", + "9220": "é™å²¡ç¸£", + "9230": "愛知縣", + "9240": "三é‡ç¸£", + "9250": "滋賀縣", + "9260": "京都府", + "9270": "大阪府", + "9280": "兵庫縣", + "9290": "奈良縣", + "9300": "和歌山縣", + "9310": "é³¥å–縣", + "9320": "島根縣", + "9330": "岡山縣", + "9340": "廣島縣", + "9350": "å±±å£ç¸£", + "9360": "徳島縣", + "9370": "香å·ç¸£", + "9380": "愛媛縣", + "9390": "高知縣", + "9400": "ç¦å²¡ç¸£", + "9410": "ä½è³€ç¸£", + "9420": "長崎縣", + "9430": "熊本縣", + "9440": "大分縣", + "9450": "宮崎縣", + "9461": "鹿兒島縣", + "9462": "奄美群島", + "9471": "沖繩本島", + "9472": "大æ±å³¶", + "9473": "å®®å¤å³¶", + "9474": "å…«é‡å±±", + "9910": "北海é“", + "9920": "æ±åŒ—地方", + "9931": "é–¢æ±åœ°æ–¹", + "9932": "伊豆諸島", + "9933": "å°ç¬ åŽŸ", + "9934": "北陸地方", + "9935": "甲信地方", + "9936": "æ±æµ·åœ°æ–¹", + "9941": "近畿地方", + "9942": "中国地方", + "9943": "四国地方", + "9951": "ä¹å·žåœ°æ–¹", + "9952": "奄美群島", + "9960": "沖繩地方" + } +} \ No newline at end of file diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/AreaForecastEEW/yue.json.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/AreaForecastEEW/yue.json.meta new file mode 100644 index 0000000..e798208 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/AreaForecastEEW/yue.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 0354844e5fb4f0040a560d36da5ea396 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/AreaForecastEEW/zh-Hant.json b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/AreaForecastEEW/zh-Hant.json new file mode 100644 index 0000000..e662f6e --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/AreaForecastEEW/zh-Hant.json @@ -0,0 +1,263 @@ +{ + "Culture": "zh-TW", + "Strings": { + "100": "石狩地方北部", + "101": "石狩地方中部", + "102": "石狩地方å—部", + "105": "渡島地方北部", + "106": "渡島地方æ±éƒ¨", + "107": "渡島地方西部", + "110": "檜山地方", + "115": "後志地方北部", + "116": "後志地方æ±éƒ¨", + "117": "後志地方西部", + "119": "北海é“奥尻島", + "120": "空知地方北部", + "121": "空知地方中部", + "122": "空知地方å—部", + "125": "上å·åœ°æ–¹åŒ—部", + "126": "上å·åœ°æ–¹ä¸­éƒ¨", + "127": "上å·åœ°æ–¹å—部", + "130": "ç•™èŒåœ°æ–¹ä¸­åŒ—部", + "131": "ç•™èŒåœ°æ–¹å—部", + "135": "宗谷地方北部", + "136": "宗谷地方å—部", + "139": "北海é“利尻礼文", + "140": "網走地方", + "141": "北見地方", + "142": "紋別地方", + "145": "胆振地方西部", + "146": "胆振地方中æ±éƒ¨", + "150": "日高地方西部", + "151": "日高地方中部", + "152": "日高地方æ±éƒ¨", + "155": "åå‹åœ°æ–¹åŒ—部", + "156": "åå‹åœ°æ–¹ä¸­éƒ¨", + "157": "åå‹åœ°æ–¹å—部", + "160": "釧路地方北部", + "161": "釧路地方中å—部", + "165": "根室地方北部", + "166": "根室地方中部", + "167": "根室地方å—部", + "200": "é’æ£®ç¸£æ´¥è¼•北部", + "201": "é’æ£®ç¸£æ´¥è¼•å—部", + "202": "é’æ£®ç¸£ä¸‰å…«ä¸ŠåŒ—", + "203": "é’æ£®ç¸£ä¸‹åŒ—", + "210": "岩手縣沿岸北部", + "211": "岩手縣沿岸å—部", + "212": "岩手縣內陸北部", + "213": "岩手縣內陸å—部", + "220": "宮城縣北部", + "221": "宮城縣å—部", + "222": "宮城縣中部", + "230": "秋田縣沿岸北部", + "231": "秋田縣沿岸å—部", + "232": "秋田縣內陸北部", + "233": "秋田縣內陸å—部", + "240": "山形縣庄內", + "241": "山形縣最上", + "242": "山形縣æ‘å±±", + "243": "山形縣置賜", + "250": "ç¦å³¶ç¸£ä¸­é€š", + "251": "ç¦å³¶ç¸£æ¿±é€š", + "252": "ç¦å³¶çœŒä¼šæ´¥", + "300": "茨城縣北部", + "301": "茨城縣å—部", + "310": "栃木縣北部", + "311": "栃木縣å—部", + "320": "群馬縣北部", + "321": "群馬縣å—部", + "330": "埼玉縣北部", + "331": "埼玉縣å—部", + "332": "埼玉縣秩父", + "340": "åƒè‘‰ç¸£æ±åŒ—部", + "341": "åƒè‘‰ç¸£è¥¿åŒ—部", + "342": "åƒè‘‰ç¸£å—部", + "350": "æ±äº¬éƒ½ï¼’3å€", + "351": "æ±äº¬éƒ½å¤šæ‘©æ±éƒ¨", + "352": "æ±äº¬éƒ½å¤šæ‘©è¥¿éƒ¨", + "354": "神津島", + "355": "伊豆大島", + "356": "æ–°å³¶", + "357": "三宅島", + "358": "八丈島", + "359": "å°ç¬ åŽŸ", + "360": "神奈å·ç¸£æ±éƒ¨", + "361": "神奈å·ç¸£è¥¿éƒ¨", + "370": "新瀉縣上越", + "371": "新瀉縣中越", + "372": "新瀉縣下越", + "375": "æ–°ç€‰ç¸£ä½æ¸¡", + "380": "富山縣æ±éƒ¨", + "381": "富山縣西部", + "390": "石å·ç¸£èƒ½ç™»", + "391": "石å·ç¸£åŠ è³€", + "400": "ç¦äº•縣嶺北", + "401": "ç¦äº•縣嶺å—", + "411": "山梨縣中ã€è¥¿éƒ¨", + "412": "山梨縣æ±éƒ¨ã€å¯Œå£«äº”æ¹–", + "420": "長野縣北部", + "421": "長野縣中部", + "422": "長野縣å—部", + "430": "å²é˜œç¸£é£›é¨¨", + "431": "å²é˜œç¸£ç¾Žæ¿ƒæ±éƒ¨", + "432": "å²é˜œç¸£ç¾Žæ¿ƒä¸­è¥¿éƒ¨", + "440": "éœå²¡ç¸£ä¼Šè±†", + "441": "éœå²¡ç¸£æ±éƒ¨", + "442": "éœå²¡ç¸£ä¸­éƒ¨", + "443": "éœå²¡ç¸£è¥¿éƒ¨", + "450": "愛知縣æ±éƒ¨", + "451": "愛知縣西部", + "460": "三é‡ç¸£åŒ—部", + "461": "三é‡ç¸£ä¸­éƒ¨", + "462": "三é‡ç¸£å—部", + "500": "滋賀縣北部", + "501": "滋賀縣å—部", + "510": "京都府北部", + "511": "京都府å—部", + "520": "大阪府北部", + "521": "大阪府å—部", + "530": "兵庫縣北部", + "531": "兵庫縣æ±å—部", + "532": "兵庫縣西å—部", + "535": "兵庫縣淡路島", + "540": "奈良縣", + "550": "和歌山縣北部", + "551": "和歌山縣å—部", + "560": "é³¥å–縣æ±éƒ¨", + "562": "é³¥å–縣中部", + "563": "é³¥å–縣西部", + "570": "島根縣æ±éƒ¨", + "571": "島根縣西部", + "575": "島根縣隠å²", + "580": "岡山縣北部", + "581": "岡山縣å—部", + "590": "廣島縣北部", + "591": "廣島縣æ±å—部", + "592": "廣島縣西å—部", + "600": "徳島縣北部", + "601": "徳島縣å—部", + "610": "香å·ç¸£æ±éƒ¨", + "611": "香å·ç¸£è¥¿éƒ¨", + "620": "愛媛縣æ±äºˆ", + "621": "愛媛縣中予", + "622": "愛媛縣å—予", + "630": "高知縣æ±éƒ¨", + "631": "高知縣中部", + "632": "高知縣西部", + "700": "å±±å£ç¸£åŒ—部", + "702": "å±±å£ç¸£è¥¿éƒ¨", + "703": "å±±å£ç¸£æ±éƒ¨", + "704": "å±±å£ç¸£ä¸­éƒ¨", + "710": "ç¦å²¡ç¸£ç¦å²¡", + "711": "ç¦å²¡ç¸£åŒ—ä¹å·ž", + "712": "ç¦å²¡ç¸£ç­‘è±", + "713": "ç¦å²¡ç¸£ç­‘後", + "720": "ä½è³€ç¸£åŒ—部", + "721": "ä½è³€ç¸£å—部", + "730": "長崎縣北部", + "731": "長崎縣西å—部", + "732": "長崎縣島原åŠå³¶", + "735": "長崎縣å°é¦¬", + "736": "長崎縣壹å²", + "737": "長崎縣五島", + "740": "熊本縣阿蘇", + "741": "熊本縣熊本", + "742": "熊本縣çƒç£¨", + "743": "熊本縣天è‰ã€èŠ¦åŒ—", + "750": "大分縣北部", + "751": "大分縣中部", + "752": "大分縣å—部", + "753": "大分縣西部", + "760": "宮崎縣北部平原部", + "761": "宮崎縣北部沿山", + "762": "宮崎縣å—部平原部", + "763": "宮崎縣å—部沿山", + "770": "鹿兒島縣薩摩", + "771": "鹿兒島縣大隅", + "774": "鹿兒島縣åå³¶æ‘", + "775": "鹿兒島縣甑島", + "776": "鹿兒島縣種å­å³¶", + "777": "鹿兒島縣屋久島", + "778": "鹿兒島縣奄美北部", + "779": "鹿兒島縣奄美å—部", + "800": "沖繩縣本島北部", + "801": "沖繩縣本島中å—部", + "802": "沖繩縣久米島", + "803": "沖繩縣大æ±å³¶", + "804": "沖繩縣宮å¤å³¶", + "805": "沖繩縣石垣島", + "806": "沖繩縣與那國島", + "807": "沖繩縣西表島", + "9011": "北海é“é“央", + "9012": "北海é“é“å—", + "9013": "北海é“é“北", + "9014": "北海é“铿±", + "9020": "é’æ£®ç¸£", + "9030": "岩手縣", + "9040": "宮城縣", + "9050": "秋田縣", + "9060": "山形縣", + "9070": "ç¦å³¶ç¸£", + "9080": "茨城縣", + "9090": "栃木縣", + "9100": "群馬縣", + "9110": "埼玉縣", + "9120": "åƒè‘‰ç¸£", + "9131": "æ±äº¬éƒ½", + "9132": "伊豆諸島", + "9133": "å°ç¬ åŽŸ", + "9140": "神奈å·ç¸£", + "9150": "新潟縣", + "9160": "富山縣", + "9170": "石å·ç¸£", + "9180": "ç¦äº•縣", + "9190": "山梨縣", + "9200": "長野縣", + "9210": "å²é˜œç¸£", + "9220": "é™å²¡ç¸£", + "9230": "愛知縣", + "9240": "三é‡ç¸£", + "9250": "滋賀縣", + "9260": "京都府", + "9270": "大阪府", + "9280": "兵庫縣", + "9290": "奈良縣", + "9300": "和歌山縣", + "9310": "é³¥å–縣", + "9320": "島根縣", + "9330": "岡山縣", + "9340": "廣島縣", + "9350": "å±±å£ç¸£", + "9360": "徳島縣", + "9370": "香å·ç¸£", + "9380": "愛媛縣", + "9390": "高知縣", + "9400": "ç¦å²¡ç¸£", + "9410": "ä½è³€ç¸£", + "9420": "長崎縣", + "9430": "熊本縣", + "9440": "大分縣", + "9450": "宮崎縣", + "9461": "鹿兒島縣", + "9462": "奄美群島", + "9471": "沖繩本島", + "9472": "大æ±å³¶", + "9473": "å®®å¤å³¶", + "9474": "å…«é‡å±±", + "9910": "北海é“", + "9920": "æ±åŒ—地方", + "9931": "é–¢æ±åœ°æ–¹", + "9932": "伊豆諸島", + "9933": "å°ç¬ åŽŸ", + "9934": "北陸地方", + "9935": "甲信地方", + "9936": "æ±æµ·åœ°æ–¹", + "9941": "近畿地方", + "9942": "中国地方", + "9943": "四国地方", + "9951": "ä¹å·žåœ°æ–¹", + "9952": "奄美群島", + "9960": "沖繩地方" + } +} \ No newline at end of file diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/AreaForecastEEW/zh-Hant.json.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/AreaForecastEEW/zh-Hant.json.meta new file mode 100644 index 0000000..bb98f1c --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/AreaForecastEEW/zh-Hant.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 17fdabb0ab28375499eda3a57a5790d9 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/AreaForecastEEW/zh.json b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/AreaForecastEEW/zh.json new file mode 100644 index 0000000..fdad4af --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/AreaForecastEEW/zh.json @@ -0,0 +1,263 @@ +{ + "Culture": "zh-CN", + "Strings": { + "100": "石狩地方北部", + "101": "石狩地方中部", + "102": "石狩地方å—部", + "105": "渡岛地方北部", + "106": "渡岛地方东部", + "107": "渡岛地方西部", + "110": "桧山地方", + "115": "åŽå¿—地方北部", + "116": "åŽå¿—地方东部", + "117": "åŽå¿—地方西部", + "119": "北海é“奥尻岛", + "120": "空知地方北部", + "121": "空知地方中部", + "122": "空知地方å—部", + "125": "上å·åœ°æ–¹åŒ—部", + "126": "上å·åœ°æ–¹ä¸­éƒ¨", + "127": "上å·åœ°æ–¹å—部", + "130": "ç•™èŒåœ°æ–¹ä¸­åŒ—部", + "131": "ç•™èŒåœ°æ–¹å—部", + "135": "宗谷地方北部", + "136": "宗谷地方å—部", + "139": "北海é“利尻礼文", + "140": "网走地方", + "141": "北è§åœ°æ–¹", + "142": "纹别地方", + "145": "胆振地方西部", + "146": "胆振地方中东部", + "150": "日高地方西部", + "151": "日高地方中部", + "152": "日高地方东部", + "155": "å胜地方北部", + "156": "å胜地方中部", + "157": "å胜地方å—部", + "160": "é’路地方北部", + "161": "é’路地方中å—部", + "165": "根室地方北部", + "166": "根室地方中部", + "167": "根室地方å—部", + "200": "é’æ£®åŽ¿æ´¥è½»åŒ—éƒ¨", + "201": "é’æ£®åŽ¿æ´¥è½»å—部", + "202": "é’æ£®åŽ¿ä¸‰å…«ä¸ŠåŒ—", + "203": "é’æ£®åŽ¿ä¸‹åŒ—", + "210": "岩手县沿岸北部", + "211": "岩手县沿岸å—部", + "212": "岩手县内陆北部", + "213": "岩手县内陆å—部", + "220": "宫城县北部", + "221": "宫城县å—部", + "222": "宫城县中部", + "230": "秋田县沿岸北部", + "231": "秋田县沿岸å—部", + "232": "秋田县内陆北部", + "233": "秋田县内陆å—部", + "240": "山形县庄内", + "241": "山形县最上", + "242": "山形县æ‘å±±", + "243": "山形县置èµ", + "250": "ç¦å²›åŽ¿ä¸­é€š", + "251": "ç¦å²›åŽ¿æ»¨é€š", + "252": "ç¦å²›åŽ¿ä¼šæ´¥", + "300": "茨城县北部", + "301": "茨城县å—部", + "310": "栃木县北部", + "311": "栃木县å—部", + "320": "群马县北部", + "321": "群马县å—部", + "330": "埼玉县北部", + "331": "埼玉县å—部", + "332": "埼玉县秩父", + "340": "åƒå¶åŽ¿ä¸œåŒ—éƒ¨", + "341": "åƒå¶åŽ¿è¥¿åŒ—éƒ¨", + "342": "åƒå¶åŽ¿å—部", + "350": "东京都23区", + "351": "东京都多摩东部", + "352": "东京都多摩西部", + "354": "神津岛", + "355": "伊豆大岛", + "356": "æ–°å²›", + "357": "三宅岛", + "358": "八丈岛", + "359": "å°ç¬ åŽŸ", + "360": "神奈å·åŽ¿ä¸œéƒ¨", + "361": "神奈å·åŽ¿è¥¿éƒ¨", + "370": "新潟县上越", + "371": "新潟县中越", + "372": "新潟县下越", + "375": "æ–°æ½ŸåŽ¿ä½æ¸¡", + "380": "富山县东部", + "381": "富山县西部", + "390": "石å·åŽ¿èƒ½ç™»", + "391": "石å·åŽ¿åŠ è´º", + "400": "ç¦äº•县岭北", + "401": "ç¦äº•县岭å—", + "411": "山梨县中ã€è¥¿éƒ¨", + "412": "山梨县东部ã€å¯Œå£«äº”æ¹–", + "420": "长野县北部", + "421": "长野县中部", + "422": "长野县å—部", + "430": "å²é˜œåŽ¿é£žé©’", + "431": "å²é˜œåŽ¿ç¾Žæµ“ä¸œéƒ¨", + "432": "å²é˜œåŽ¿ç¾Žæµ“ä¸­è¥¿éƒ¨", + "440": "é™å†ˆåŽ¿ä¼Šè±†", + "441": "é™å†ˆåŽ¿ä¸œéƒ¨", + "442": "é™å†ˆåŽ¿ä¸­éƒ¨", + "443": "é™å†ˆåŽ¿è¥¿éƒ¨", + "450": "爱知县东部", + "451": "爱知县西部", + "460": "三é‡åŽ¿åŒ—éƒ¨", + "461": "三é‡åŽ¿ä¸­éƒ¨", + "462": "三é‡åŽ¿å—部", + "500": "滋贺县北部", + "501": "滋贺县å—部", + "510": "京都府北部", + "511": "京都府å—部", + "520": "大阪府北部", + "521": "大阪府å—部", + "530": "兵库县北部", + "531": "兵库县东å—部", + "532": "兵库县西å—部", + "535": "兵库县淡路岛", + "540": "奈良县", + "550": "和歌山县北部", + "551": "和歌山县å—部", + "560": "鸟å–县东部", + "562": "鸟å–县中部", + "563": "鸟å–县西部", + "570": "岛根县东部", + "571": "岛根县西部", + "575": "岛根县éšå²", + "580": "冈山县北部", + "581": "冈山县å—部", + "590": "广岛县北部", + "591": "广岛县东å—部", + "592": "广岛县西å—部", + "600": "德岛县北部", + "601": "德岛县å—部", + "610": "香å·åŽ¿ä¸œéƒ¨", + "611": "香å·åŽ¿è¥¿éƒ¨", + "620": "爱媛县东予", + "621": "爱媛县中予", + "622": "爱媛县å—予", + "630": "高知县东部", + "631": "高知县中部", + "632": "高知县西部", + "700": "å±±å£åŽ¿åŒ—éƒ¨", + "702": "å±±å£åŽ¿è¥¿éƒ¨", + "703": "å±±å£åŽ¿ä¸œéƒ¨", + "704": "å±±å£åŽ¿ä¸­éƒ¨", + "710": "ç¦å†ˆåŽ¿ç¦å†ˆ", + "711": "ç¦å†ˆåŽ¿åŒ—ä¹å·ž", + "712": "ç¦å†ˆåŽ¿ç­‘ä¸°", + "713": "ç¦å†ˆåŽ¿ç­‘åŽ", + "720": "ä½è´ºåŽ¿åŒ—éƒ¨", + "721": "ä½è´ºåŽ¿å—部", + "730": "长崎县北部", + "731": "长崎县西å—部", + "732": "长崎县岛原åŠå²›", + "735": "长崎县对马", + "736": "长崎县壹å²", + "737": "长崎县五岛", + "740": "熊本县阿è‹", + "741": "熊本县熊本", + "742": "熊本县çƒç£¨", + "743": "熊本县天è‰ã€èŠ¦åŒ—", + "750": "大分县北部", + "751": "大分县中部", + "752": "大分县å—部", + "753": "大分县西部", + "760": "宫崎县北部平原部", + "761": "宫崎县北部沿山", + "762": "宫崎县å—部平原部", + "763": "宫崎县å—部沿山", + "770": "é¹¿å„¿å²›åŽ¿è¨æ‘©", + "771": "鹿儿岛县大隅", + "774": "鹿儿岛县åå²›æ‘", + "775": "鹿儿岛县甑岛", + "776": "鹿儿岛ç§å­å²›", + "777": "鹿儿岛县屋久岛", + "778": "鹿儿岛县奄美北部", + "779": "鹿儿岛县奄美å—部", + "800": "冲绳县本岛北部", + "801": "冲绳县本岛中å—部", + "802": "冲绳县久米岛", + "803": "冲绳县大东岛", + "804": "冲绳县宫å¤å²›", + "805": "冲绳县石垣岛", + "806": "冲绳县与那国岛", + "807": "冲绳县西表岛", + "9011": "北海é“é“央", + "9012": "北海é“é“å—", + "9013": "北海é“é“北", + "9014": "北海é“é“东", + "9020": "é’æ£®åŽ¿", + "9030": "岩手县", + "9040": "宫城县", + "9050": "秋田县", + "9060": "山形县", + "9070": "ç¦å²›åŽ¿", + "9080": "茨城县", + "9090": "栃木县", + "9100": "群马县", + "9110": "埼玉县", + "9120": "åƒå¶åŽ¿", + "9131": "东京都", + "9132": "伊豆诸岛", + "9133": "å°ç¬ åŽŸ", + "9140": "神奈å·åŽ¿", + "9150": "新潟县", + "9160": "富山县", + "9170": "石å·åŽ¿", + "9180": "ç¦äº•县", + "9190": "山梨县", + "9200": "长野县", + "9210": "å²é˜œåŽ¿", + "9220": "é™å†ˆåŽ¿", + "9230": "爱知县", + "9240": "三é‡åŽ¿", + "9250": "滋贺县", + "9260": "京都府", + "9270": "大阪府", + "9280": "兵库县", + "9290": "奈良县", + "9300": "和歌山县", + "9310": "鸟å–县", + "9320": "岛根县", + "9330": "冈山县", + "9340": "广岛县", + "9350": "å±±å£åŽ¿", + "9360": "徳岛县", + "9370": "香å·åŽ¿", + "9380": "爱媛县", + "9390": "高知县", + "9400": "ç¦å†ˆåŽ¿", + "9410": "ä½è´ºåŽ¿", + "9420": "长崎县", + "9430": "熊本县", + "9440": "大分县", + "9450": "宫崎县", + "9461": "鹿儿岛县", + "9462": "奄美群岛", + "9471": "冲绳本岛", + "9472": "大东岛", + "9473": "宫å¤å²›", + "9474": "å…«é‡å±±", + "9910": "北海é“", + "9920": "东北地方", + "9931": "关东地方", + "9932": "伊豆诸岛", + "9933": "å°ç¬ åŽŸ", + "9934": "北陆地方", + "9935": "甲信地方", + "9936": "东海地方", + "9941": "近畿地方", + "9942": "中国地方", + "9943": "四国地方", + "9951": "ä¹å·žåœ°æ–¹", + "9952": "奄美群岛", + "9960": "冲绳地方" + } +} \ No newline at end of file diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/AreaForecastEEW/zh.json.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/AreaForecastEEW/zh.json.meta new file mode 100644 index 0000000..abf81bd --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/AreaForecastEEW/zh.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 0e79b181f6dc8384789b62f263efde5e +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/AreaTsunami.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/AreaTsunami.meta new file mode 100644 index 0000000..b5ead31 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/AreaTsunami.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: aa55e10137d6f74419358e3fd0782e6d +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/AreaTsunami/en.json b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/AreaTsunami/en.json new file mode 100644 index 0000000..7eb7e85 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/AreaTsunami/en.json @@ -0,0 +1,104 @@ +{ + "Culture": "en-US", + "Strings": { + "100": "Eastern part of Pacific Coast of Hokkaido", + "101": "Central part of Pacific Coast of Hokkaido", + "102": "Western part of Pacific Coast of Hokkaido", + "110": "Northern part of Japan Sea Coast of Hokkaido", + "111": "Southern part of Japan Sea Coast of Hokkaido", + "120": "Okhotsk Sea Coast of Hokkaido", + "191": "Pacific Coast of Hokkaido", + "192": "Japan Sea Coast of Hokkaido", + "193": "Okhotsk Sea Coast of Hokkaido", + "200": "Japan Sea Coast of Aomori Prefecture", + "201": "Pacific Coast of Aomori Prefecture", + "202": "Mutsu Bay", + "210": "Iwate Prefecture", + "220": "Miyagi Prefecture", + "230": "Akita Prefecture", + "240": "Yamagata Prefecture", + "250": "Fukushima Prefecture", + "281": "Aomori Prefecture", + "291": "Pacific Coast of Tohoku", + "292": "Japan Sea Coast of Tohoku", + "300": "Ibaraki Prefecture", + "310": "Kujukuri and Sotobo Area, Chiba Prefecture", + "311": "Uchibo Area, Chiba Prefecture", + "312": "Tokyo Bay", + "320": "Izu Islands", + "321": "Ogasawara Islands", + "330": "Sagami Bay and Miura Peninsula", + "340": "Niigata Prefecture, Except Sadogashima Island", + "341": "Sadogashima Island", + "350": "Toyama Prefecture", + "360": "Noto Area, Ishikawa Prefecture", + "361": "Kaga Area, Ishikawa Prefecture", + "370": "Fukui Prefecture", + "380": "Shizuoka Prefecture", + "390": "Pacific Coast of Aichi Prefecture", + "391": "Ise Bay and Mikawa Bay", + "400": "Southern Part of Mie Prefecture", + "481": "Chiba Prefecture", + "482": "Kanagawa Prefecture", + "483": "Niigata Prefecture", + "484": "Ishikawa Prefecture", + "485": "Aichi Prefecture", + "486": "Mie Prefecture", + "491": "Kanto", + "492": "Izu and Ogasawara", + "493": "Hokuriku", + "494": "Tokai", + "500": "Kyoto Prefecture", + "510": "Osaka Prefecture", + "520": "Northern Part of Hyogo Prefecture", + "521": "Setonaikai Coast of Hyogo Prefecture", + "522": "Southern Part of Awaji Island", + "530": "Wakayama Prefecture", + "540": "Tottori Prefecture", + "550": "Shimane Prefecture, Except Oki Islands", + "551": "Oki Islands", + "560": "Okayama Prefecture", + "570": "Hiroshima Prefecture", + "580": "Tokushima Prefecture", + "590": "Kagawa Prefecture", + "600": "Bungo Strait Coast of Ehime Prefecture", + "601": "Setonaikai Coast of Ehime Prefecture", + "610": "Kochi Prefecture", + "681": "Hyogo Prefecture", + "682": "Shimane Prefecture", + "683": "Ehime Prefecture", + "691": "Pacific Coast of Kinki/Shikoku", + "692": "Japan Sea Coast of Kinki/Chugoku", + "693": "Setonaikai Coast", + "700": "Japan Sea Coast of Yamaguchi Prefecture", + "701": "Setonaikai Coast of Yamaguchi Prefecture", + "710": "Setonaikai Coast of Fukuoka Prefecture", + "711": "Japan Sea Coast of Fukuoka Prefecture", + "712": "Ariake Sea and Yatsushiro Sea", + "720": "Northern Part of Saga Prefecture", + "730": "Western Part of Nagasaki Prefecture", + "731": "Iki Island and Tsushima Islands", + "740": "Amakusa Nada Coast of Kumamoto Prefecture", + "750": "Setonaikai Coast of Oita Prefecture", + "751": "Bungo Strait Coast of Oita Prefecture", + "760": "Miyazaki Prefecture", + "770": "Eastern Part of Kagoshima Prefecture", + "771": "Tanegashima and Yakushima Area", + "772": "Amami Islands and Tokara Islands", + "773": "Western Part of Kagoshima Prefecture", + "781": "Yamaguchi Prefecture", + "782": "Fukuoka Prefecture", + "783": "Saga Prefecture", + "784": "Nagasaki Prefecture", + "785": "Kumamoto Prefecture", + "786": "Ooita Prefecture", + "787": "Kagoshima Prefecture", + "791": "Eastern Part of Kyushu", + "792": "Western Part of Kyushu", + "793": "Satsunan Islands", + "800": "Okinawa Main Island Region", + "801": "Daitojima Area", + "802": "Miyakojima and Yaeyama Area", + "891": "Okinawa Prefecture" + } +} \ No newline at end of file diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/AreaTsunami/en.json.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/AreaTsunami/en.json.meta new file mode 100644 index 0000000..1f8f9f8 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/AreaTsunami/en.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 0335cd74319c34e4b843de37def2864b +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/AreaTsunami/und.json b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/AreaTsunami/und.json new file mode 100644 index 0000000..7695ced --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/AreaTsunami/und.json @@ -0,0 +1,104 @@ +{ + "Culture": "ja-JP", + "Strings": { + "100": "北海é“太平洋沿岸æ±éƒ¨", + "101": "北海é“太平洋沿岸中部", + "102": "北海é“太平洋沿岸西部", + "110": "åŒ—æµ·é“æ—¥æœ¬æµ·æ²¿å²¸åŒ—部", + "111": "åŒ—æµ·é“æ—¥æœ¬æµ·æ²¿å²¸å—部", + "120": "オホーツク海沿岸", + "191": "北海é“太平洋沿岸", + "192": "åŒ—æµ·é“æ—¥æœ¬æµ·æ²¿å²¸", + "193": "オホーツク海沿岸", + "200": "é’æ£®çœŒæ—¥æœ¬æµ·æ²¿å²¸", + "201": "é’æ£®çœŒå¤ªå¹³æ´‹æ²¿å²¸", + "202": "陸奥湾", + "210": "岩手県", + "220": "宮城県", + "230": "秋田県", + "240": "山形県", + "250": "ç¦å³¶çœŒ", + "281": "é’æ£®çœŒ", + "291": "æ±åŒ—地方太平洋沿岸", + "292": "æ±åŒ—地方日本海沿岸", + "300": "茨城県", + "310": "åƒè‘‰çœŒä¹åä¹é‡Œãƒ»å¤–房", + "311": "åƒè‘‰çœŒå†…房", + "312": "æ±äº¬æ¹¾å†…æ¹¾", + "320": "伊豆諸島", + "321": "å°ç¬ åŽŸè«¸å³¶", + "330": "相模湾・三浦åŠå³¶", + "340": "新潟県上中下越", + "341": "使¸¡", + "350": "富山県", + "360": "石å·çœŒèƒ½ç™»", + "361": "石å·çœŒåŠ è³€", + "370": "ç¦äº•県", + "380": "é™å²¡çœŒ", + "390": "愛知県外海", + "391": "伊勢・三河湾", + "400": "三é‡çœŒå—部", + "481": "åƒè‘‰çœŒ", + "482": "神奈å·çœŒ", + "483": "新潟県", + "484": "石å·çœŒ", + "485": "愛知県", + "486": "三é‡çœŒ", + "491": "é–¢æ±åœ°æ–¹", + "492": "伊豆・å°ç¬ åŽŸè«¸å³¶", + "493": "北陸地方", + "494": "æ±æµ·åœ°æ–¹", + "500": "京都府", + "510": "大阪府", + "520": "兵庫県北部", + "521": "兵庫県瀬戸内海沿岸", + "522": "淡路島å—部", + "530": "和歌山県", + "540": "é³¥å–県", + "550": "島根県出雲・石見", + "551": "éš å²", + "560": "岡山県", + "570": "広島県", + "580": "徳島県", + "590": "香å·çœŒ", + "600": "愛媛県宇和海沿岸", + "601": "愛媛県瀬戸内海沿岸", + "610": "高知県", + "681": "兵庫県", + "682": "島根県", + "683": "愛媛県", + "691": "近畿四国太平洋沿岸", + "692": "近畿中国日本海沿岸", + "693": "瀬戸内海沿岸", + "700": "å±±å£çœŒæ—¥æœ¬æµ·æ²¿å²¸", + "701": "å±±å£çœŒç€¬æˆ¸å†…海沿岸", + "710": "ç¦å²¡çœŒç€¬æˆ¸å†…海沿岸", + "711": "ç¦å²¡çœŒæ—¥æœ¬æµ·æ²¿å²¸", + "712": "有明・八代海", + "720": "ä½è³€çœŒåŒ—部", + "730": "長崎県西方", + "731": "壱å²ãƒ»å¯¾é¦¬", + "740": "熊本県天è‰ç˜æ²¿å²¸", + "750": "大分県瀬戸内海沿岸", + "751": "å¤§åˆ†çœŒè±Šå¾Œæ°´é“æ²¿å²¸", + "760": "宮崎県", + "770": "鹿å…島県æ±éƒ¨", + "771": "種å­å³¶ãƒ»å±‹ä¹…島地方", + "772": "奄美群島・トカラ列島", + "773": "鹿å…島県西部", + "781": "å±±å£çœŒ", + "782": "ç¦å²¡çœŒ", + "783": "ä½è³€çœŒ", + "784": "長崎県", + "785": "熊本県", + "786": "大分県", + "787": "鹿å…島県", + "791": "ä¹å·žåœ°æ–¹æ±éƒ¨", + "792": "ä¹å·žåœ°æ–¹è¥¿éƒ¨", + "793": "è–©å—諸島", + "800": "沖縄本島地方", + "801": "大æ±å³¶åœ°æ–¹", + "802": "å®®å¤å³¶ãƒ»å…«é‡å±±åœ°æ–¹", + "891": "沖縄県地方" + } +} \ No newline at end of file diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/AreaTsunami/und.json.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/AreaTsunami/und.json.meta new file mode 100644 index 0000000..49ece67 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/AreaTsunami/und.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 4d9bf762bc4dd3f4b84c9895e9c31693 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/AreaTsunami/yue.json b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/AreaTsunami/yue.json new file mode 100644 index 0000000..baafcd7 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/AreaTsunami/yue.json @@ -0,0 +1,104 @@ +{ + "Culture": "yue-HK", + "Strings": { + "100": "北海é“太平洋沿岸æ±éƒ¨", + "101": "北海é“太平洋沿岸中部", + "102": "北海é“太平洋沿岸西部", + "110": "åŒ—æµ·é“æ—¥æœ¬æµ·æ²¿å²¸åŒ—部", + "111": "åŒ—æµ·é“æ—¥æœ¬æµ·æ²¿å²¸å—部", + "120": "é„‚éœæ¬¡å…‹æµ·æ²¿å²¸", + "191": "北海é“太平洋沿岸", + "192": "åŒ—æµ·é“æ—¥æœ¬æµ·æ²¿å²¸", + "193": "é„‚éœæ¬¡å…‹æµ·æ²¿å²¸", + "200": "é’æ£®ç¸£æ—¥æœ¬æµ·æ²¿å²¸", + "201": "é’æ£®ç¸£å¤ªå¹³æ´‹æ²¿å²¸", + "202": "陸奥ç£", + "210": "岩手縣", + "220": "宮城縣", + "230": "秋田縣", + "240": "山形縣", + "250": "ç¦å³¶ç¸£", + "281": "é’æ£®ç¸£", + "291": "æ±åŒ—地方太平洋沿岸", + "292": "æ±åŒ—地方日本海沿岸", + "300": "茨城縣", + "310": "åƒè‘‰ç¸£ä¹åä¹é‡Œã€å¤–房", + "311": "åƒè‘‰ç¸£å…§æˆ¿", + "312": "æ±äº¬ç£å…§ç£", + "320": "伊豆諸島", + "321": "å°ç¬ åŽŸè«¸å³¶", + "330": "相模ç£ã€ä¸‰æµ¦åŠå³¶", + "340": "新瀉縣上中下越", + "341": "使¸¡", + "350": "富山縣", + "360": "石å·ç¸£èƒ½ç™»", + "361": "石å·ç¸£åŠ è³€", + "370": "ç¦äº•縣", + "380": "é™å²¡ç¸£", + "390": "愛知縣外海", + "391": "伊勢ã€ä¸‰æ²³ç£", + "400": "三é‡ç¸£å—部", + "481": "åƒè‘‰ç¸£", + "482": "神奈å·ç¸£", + "483": "新瀉縣", + "484": "石å·ç¸£", + "485": "愛知縣", + "486": "三é‡ç¸£", + "491": "é—œæ±åœ°æ–¹", + "492": "伊豆ã€å°ç¬ åŽŸè«¸å³¶", + "493": "北陸地方", + "494": "æ±æµ·åœ°æ–¹", + "500": "京都府", + "510": "大阪府", + "520": "兵庫縣北部", + "521": "兵庫縣瀨戶內海沿岸", + "522": "淡路島å—部", + "530": "和歌山縣", + "540": "é³¥å–縣", + "550": "島根縣出雲ã€çŸ³è¦‹", + "551": "éš å²", + "560": "岡山縣", + "570": "廣島縣", + "580": "徳島縣", + "590": "香å·ç¸£", + "600": "愛媛縣宇和海沿岸", + "601": "愛媛縣瀨戶內海沿岸", + "610": "高知縣", + "681": "兵庫縣", + "682": "島根縣", + "683": "愛媛縣", + "691": "近畿四國太平洋沿岸", + "692": "近畿中國日本海沿岸", + "693": "瀨戶內海沿岸", + "700": "å±±å£ç¸£æ—¥æœ¬æµ·æ²¿å²¸", + "701": "å±±å£ç¸£ç€¨æˆ¶å…§æµ·æ²¿å²¸", + "710": "ç¦å²¡ç¸£ç€¨æˆ¶å…§æµ·æ²¿å²¸", + "711": "ç¦å²¡ç¸£æ—¥æœ¬æµ·æ²¿å²¸", + "712": "有明ã€å…«ä»£æµ·", + "720": "ä½è³€ç¸£åŒ—部", + "730": "長崎縣西方", + "731": "壹å²ã€å°é¦¬", + "740": "熊本縣天è‰ç˜æ²¿å²¸", + "750": "大分縣瀨戶內海沿岸", + "751": "大分縣è±å¾Œæ°´é“沿岸", + "760": "宮崎縣", + "770": "鹿兒島縣æ±éƒ¨", + "771": "種å­å³¶ã€å±‹ä¹…島地方", + "772": "奄美群島ã€å噶喇列島", + "773": "鹿兒島縣西部", + "781": "å±±å£ç¸£", + "782": "ç¦å²¡ç¸£", + "783": "ä½è³€ç¸£", + "784": "長崎縣", + "785": "熊本縣", + "786": "大分縣", + "787": "鹿兒島縣", + "791": "ä¹å·žåœ°æ–¹æ±éƒ¨", + "792": "ä¹å·žåœ°æ–¹è¥¿éƒ¨", + "793": "è–©å—諸島", + "800": "沖縄本島地方", + "801": "大æ±å³¶åœ°æ–¹", + "802": "å®®å¤å³¶ã€å…«é‡å±±åœ°æ–¹", + "891": "沖縄縣地方" + } +} \ No newline at end of file diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/AreaTsunami/yue.json.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/AreaTsunami/yue.json.meta new file mode 100644 index 0000000..a2420aa --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/AreaTsunami/yue.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: ba43e7b1754885c459f6353e501c5c5f +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/AreaTsunami/zh-Hant.json b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/AreaTsunami/zh-Hant.json new file mode 100644 index 0000000..328414a --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/AreaTsunami/zh-Hant.json @@ -0,0 +1,104 @@ +{ + "Culture": "zh-TW", + "Strings": { + "100": "北海é“太平洋沿岸æ±éƒ¨", + "101": "北海é“太平洋沿岸中部", + "102": "北海é“太平洋沿岸西部", + "110": "åŒ—æµ·é“æ—¥æœ¬æµ·æ²¿å²¸åŒ—部", + "111": "åŒ—æµ·é“æ—¥æœ¬æµ·æ²¿å²¸å—部", + "120": "é„‚éœæ¬¡å…‹æµ·æ²¿å²¸", + "191": "北海é“太平洋沿岸", + "192": "åŒ—æµ·é“æ—¥æœ¬æµ·æ²¿å²¸", + "193": "é„‚éœæ¬¡å…‹æµ·æ²¿å²¸", + "200": "é’æ£®ç¸£æ—¥æœ¬æµ·æ²¿å²¸", + "201": "é’æ£®ç¸£å¤ªå¹³æ´‹æ²¿å²¸", + "202": "陸奥ç£", + "210": "岩手縣", + "220": "宮城縣", + "230": "秋田縣", + "240": "山形縣", + "250": "ç¦å³¶ç¸£", + "281": "é’æ£®ç¸£", + "291": "æ±åŒ—地方太平洋沿岸", + "292": "æ±åŒ—地方日本海沿岸", + "300": "茨城縣", + "310": "åƒè‘‰ç¸£ä¹åä¹é‡Œã€å¤–房", + "311": "åƒè‘‰ç¸£å…§æˆ¿", + "312": "æ±äº¬ç£å…§ç£", + "320": "伊豆諸島", + "321": "å°ç¬ åŽŸè«¸å³¶", + "330": "相模ç£ã€ä¸‰æµ¦åŠå³¶", + "340": "新瀉縣上中下越", + "341": "使¸¡", + "350": "富山縣", + "360": "石å·ç¸£èƒ½ç™»", + "361": "石å·ç¸£åŠ è³€", + "370": "ç¦äº•縣", + "380": "é™å²¡ç¸£", + "390": "愛知縣外海", + "391": "伊勢ã€ä¸‰æ²³ç£", + "400": "三é‡ç¸£å—部", + "481": "åƒè‘‰ç¸£", + "482": "神奈å·ç¸£", + "483": "新瀉縣", + "484": "石å·ç¸£", + "485": "愛知縣", + "486": "三é‡ç¸£", + "491": "é—œæ±åœ°æ–¹", + "492": "伊豆ã€å°ç¬ åŽŸè«¸å³¶", + "493": "北陸地方", + "494": "æ±æµ·åœ°æ–¹", + "500": "京都府", + "510": "大阪府", + "520": "兵庫縣北部", + "521": "兵庫縣瀨戶內海沿岸", + "522": "淡路島å—部", + "530": "和歌山縣", + "540": "é³¥å–縣", + "550": "島根縣出雲ã€çŸ³è¦‹", + "551": "éš å²", + "560": "岡山縣", + "570": "廣島縣", + "580": "徳島縣", + "590": "香å·ç¸£", + "600": "愛媛縣宇和海沿岸", + "601": "愛媛縣瀨戶內海沿岸", + "610": "高知縣", + "681": "兵庫縣", + "682": "島根縣", + "683": "愛媛縣", + "691": "近畿四國太平洋沿岸", + "692": "近畿中國日本海沿岸", + "693": "瀨戶內海沿岸", + "700": "å±±å£ç¸£æ—¥æœ¬æµ·æ²¿å²¸", + "701": "å±±å£ç¸£ç€¨æˆ¶å…§æµ·æ²¿å²¸", + "710": "ç¦å²¡ç¸£ç€¨æˆ¶å…§æµ·æ²¿å²¸", + "711": "ç¦å²¡ç¸£æ—¥æœ¬æµ·æ²¿å²¸", + "712": "有明ã€å…«ä»£æµ·", + "720": "ä½è³€ç¸£åŒ—部", + "730": "長崎縣西方", + "731": "壹å²ã€å°é¦¬", + "740": "熊本縣天è‰ç˜æ²¿å²¸", + "750": "大分縣瀨戶內海沿岸", + "751": "大分縣è±å¾Œæ°´é“沿岸", + "760": "宮崎縣", + "770": "鹿兒島縣æ±éƒ¨", + "771": "種å­å³¶ã€å±‹ä¹…島地方", + "772": "奄美群島ã€å噶喇列島", + "773": "鹿兒島縣西部", + "781": "å±±å£ç¸£", + "782": "ç¦å²¡ç¸£", + "783": "ä½è³€ç¸£", + "784": "長崎縣", + "785": "熊本縣", + "786": "大分縣", + "787": "鹿兒島縣", + "791": "ä¹å·žåœ°æ–¹æ±éƒ¨", + "792": "ä¹å·žåœ°æ–¹è¥¿éƒ¨", + "793": "è–©å—諸島", + "800": "沖縄本島地方", + "801": "大æ±å³¶åœ°æ–¹", + "802": "å®®å¤å³¶ã€å…«é‡å±±åœ°æ–¹", + "891": "沖縄縣地方" + } +} \ No newline at end of file diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/AreaTsunami/zh-Hant.json.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/AreaTsunami/zh-Hant.json.meta new file mode 100644 index 0000000..433d0ca --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/AreaTsunami/zh-Hant.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 7a911308dbd7d7a4f8b4ece7e12a06c2 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/AreaTsunami/zh.json b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/AreaTsunami/zh.json new file mode 100644 index 0000000..7407e09 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/AreaTsunami/zh.json @@ -0,0 +1,104 @@ +{ + "Culture": "zh-CN", + "Strings": { + "100": "北海é“太平洋沿岸东部", + "101": "北海é“太平洋沿岸中部", + "102": "北海é“太平洋沿岸西部", + "110": "åŒ—æµ·é“æ—¥æœ¬æµ·æ²¿å²¸åŒ—部", + "111": "åŒ—æµ·é“æ—¥æœ¬æµ·æ²¿å²¸å—部", + "120": "é„‚éœæ¬¡å…‹æµ·æ²¿å²¸", + "191": "北海é“太平洋沿岸", + "192": "åŒ—æµ·é“æ—¥æœ¬æµ·æ²¿å²¸", + "193": "é„‚éœæ¬¡å…‹æµ·æ²¿å²¸", + "200": "é’æ£®åŽ¿æ—¥æœ¬æµ·æ²¿å²¸", + "201": "é’æ£®åŽ¿å¤ªå¹³æ´‹æ²¿å²¸", + "202": "陆奥湾", + "210": "岩手县", + "220": "宮城县", + "230": "秋田县", + "240": "山形县", + "250": "ç¦å²›åŽ¿", + "281": "é’æ£®åŽ¿", + "291": "æ±åŒ—地方太平洋沿岸", + "292": "æ±åŒ—地方日本海沿岸", + "300": "茨城县", + "310": "åƒå¶åŽ¿ä¹åä¹é‡Œã€å¤–房", + "311": "åƒå¶åŽ¿å†…æˆ¿", + "312": "东京湾内湾", + "320": "伊豆诸岛", + "321": "å°ç¬ åŽŸè¯¸å²›", + "330": "相模湾ã€ä¸‰æµ¦åŠå²›", + "340": "新潟县上中下越", + "341": "使¸¡", + "350": "富山县", + "360": "石å·åŽ¿èƒ½ç™»", + "361": "石å·åŽ¿åŠ è´º", + "370": "ç¦äº•县", + "380": "é™å†ˆåŽ¿", + "390": "爱知县外海", + "391": "伊势ã€ä¸‰æ²³æ¹¾", + "400": "三é‡åŽ¿å—部", + "481": "åƒå¶åŽ¿", + "482": "神奈å·åŽ¿", + "483": "新潟县", + "484": "石å·åŽ¿", + "485": "爱知县", + "486": "三é‡åŽ¿", + "491": "关东地方", + "492": "伊豆ã€å°ç¬ åŽŸè¯¸å²›", + "493": "北陆地方", + "494": "东海地方", + "500": "京都府", + "510": "大阪府", + "520": "兵库县北部", + "521": "兵库县濑户内海沿岸", + "522": "淡路岛å—部", + "530": "和歌山县", + "540": "鸟å–县", + "550": "岛根县出云ã€çŸ³è§", + "551": "éšå²", + "560": "冈山县", + "570": "广岛县", + "580": "德岛县", + "590": "香å·åŽ¿", + "600": "爱媛县宇和海沿岸", + "601": "爱媛县濑户内海沿岸", + "610": "高知县", + "681": "兵库县", + "682": "岛根县", + "683": "爱媛县", + "691": "近畿四国太平洋沿岸", + "692": "近畿中国日本海沿岸", + "693": "濑户内海沿岸", + "700": "å±±å£åŽ¿æ—¥æœ¬æµ·æ²¿å²¸", + "701": "å±±å£åŽ¿æ¿‘æˆ·å†…æµ·æ²¿å²¸", + "710": "ç¦å†ˆåŽ¿æ¿‘æˆ·å†…æµ·æ²¿å²¸", + "711": "ç¦å†ˆåŽ¿æ—¥æœ¬æµ·æ²¿å²¸", + "712": "有明ã€å…«ä»£æµ·", + "720": "ä½è´ºåŽ¿åŒ—éƒ¨", + "730": "长崎县西方", + "731": "壹å²ã€å¯¹é©¬", + "740": "ç†Šæœ¬åŽ¿å¤©è‰æ»©æ²¿å²¸", + "750": "大分县濑户内海沿岸", + "751": "å¤§åˆ†åŽ¿ä¸°åŽæ°´é“沿岸", + "760": "宫崎县", + "770": "鹿儿岛县东部", + "771": "ç§å­å²›ã€å±‹ä¹…岛地方", + "772": "奄美群岛ã€å噶喇列岛", + "773": "鹿儿岛县西部", + "781": "å±±å£åŽ¿", + "782": "ç¦å†ˆåŽ¿", + "783": "ä½è´ºåŽ¿", + "784": "长崎县", + "785": "熊本县", + "786": "大分县", + "787": "鹿儿岛县", + "791": "ä¹å·žåœ°æ–¹ä¸œéƒ¨", + "792": "ä¹å·žåœ°æ–¹è¥¿éƒ¨", + "793": "è¨å—诸岛", + "800": "冲绳本岛地方", + "801": "大东岛地方", + "802": "å®®å¤å²›ã€å…«é‡å±±åœ°æ–¹", + "891": "冲绳县地方" + } +} \ No newline at end of file diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/AreaTsunami/zh.json.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/AreaTsunami/zh.json.meta new file mode 100644 index 0000000..cc0f928 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/AreaTsunami/zh.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 3aa18d70013bc7244a59aef06991f343 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/PointTsunami.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/PointTsunami.meta new file mode 100644 index 0000000..4d2af9e --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/PointTsunami.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 479a24d999387f343a078213dcf7e2f6 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/PointTsunami/en.json b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/PointTsunami/en.json new file mode 100644 index 0000000..a0fce5c --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/PointTsunami/en.json @@ -0,0 +1,445 @@ +{ + "Culture": "en-US", + "Strings": { + "10001": "Kushiro", + "10002": "Hanasaki, Nemuro City", + "10020": "Port Nemuro", + "10021": "Port Kiritappu, Hamanaka Town", + "10050": "off the coast of Kushiro 100km A", + "10060": "off the coast of Kushiro 80km A", + "10061": "off the coast of Kushiro 80km B", + "10062": "off the southeast coast of Nemuro 80km A", + "10070": "off the coast of Kushiro 60km A", + "10071": "off the southeast coast of Nemuro 50km A", + "10072": "off the coast of Kushiro 50km A", + "10073": "off the southeast coast of Nemuro 60km A", + "10101": "Urakawa", + "10102": "Port Tokachi", + "10103": "Shoya, Erimo Town", + "10150": "off the coast of Tokachi 100km A", + "10151": "off the coast of Urakawa 100km A", + "10152": "off the coast of Urakawa 100km B", + "10153": "off the coast of Tokachi 90km A", + "10160": "off the coast of Tokachi 80km A", + "10161": "off the coast of Tokachi 80km B", + "10162": "off the coast of Tokachi 80km C", + "10163": "off the coast of Urakawa 70km A", + "10170": "off the coast of Tokachi 60km A", + "10171": "off the coast of Urakawa 60km A", + "10172": "off the coast of Urakawa 50km A", + "10202": "Hakodate", + "10203": "West Port, Tomakomai", + "10204": "Yoshioka, Fukushima Town", + "10221": "East Port, Tomakomai", + "10222": "Port Shiraoi", + "10223": "Port Oshimamori", + "10224": "Port Muroran", + "11001": "Wakkanai", + "11002": "Rumoi", + "11003": "Otaru", + "11022": "New Port, Ishikari Bay", + "11023": "Port Kutsugata, Rishiri Island", + "11024": "Port Haboro", + "11030": "Oshoro, Otaru City", + "11101": "Suttsu", + "11102": "Esashi", + "11121": "Port Setana", + "11122": "Port Iwanai", + "11123": "Port Okushiri, Okushiri Island", + "11130": "Matsue, Okushiri Island", + "12001": "Abashiri", + "12003": "Port Esashi", + "12020": "Port Monbetsu", + "20001": "Fukaura", + "20002": "Tappi", + "20090": "off the coast of Fukaura, Aomori", + "20102": "Sekinehama, Mutsu City", + "20120": "Port Ogawara, Mutsu", + "20121": "Port Hachinohe", + "20150": "off the east coast of Aomori 100km A", + "20151": "off the east coast of Aomori 90km A", + "20160": "off the east coast of Aomori 80km A", + "20170": "off the east coast of Aomori 60km A", + "20171": "off the east coast of Aomori 60km B", + "20172": "off the east coast of Aomori 50km A", + "20173": "off the east coast of Aomori 50km B", + "20180": "off the east coast of Aomori 40km A", + "20181": "off the east coast of Aomori 30km A", + "20190": "off the coast of Hachinohe, Aomori", + "20201": "Aomori", + "20202": "Ominato, Mutsu City", + "21001": "Miyako", + "21002": "Ofunato", + "21003": "Kamaishi", + "21020": "Port Kuji", + "21050": "off the coast of Iwate 90km A", + "21051": "off the coast of Iwate 90km B", + "21060": "off the coast of Iwate 70km A", + "21061": "off the coast of Iwate 80km A", + "21070": "off the coast of Iwate 60km A", + "21071": "off the coast of Iwate 60km B", + "21072": "off the coast of Iwate 60km C", + "21080": "off the coast of Iwate 40km A", + "21081": "off the coast of Iwate 40km B", + "21082": "off the coast of Iwate 40km C", + "21083": "off the coast of Iwate 30km A", + "21084": "off the coast of Iwate 30km B", + "21090": "off the coast of Kamaishi, Iwate", + "21091": "off the coast of Miyako, Iwate", + "21092": "off the coast of Kuji, Iwate", + "22002": "Ayukawa, Ishinomaki City", + "22021": "Port Sendai", + "22022": "Port Ishinomaki", + "22050": "off the coast of Miyagi 90km A", + "22060": "off the coast of Miyagi 80km A", + "22061": "off the coast of Miyagi 80km B", + "22070": "off the coast of Miyagi 60km A", + "22071": "off the coast of Miyagi 50km A", + "22072": "off the coast of Miyagi 50km B", + "22080": "off the coast of Miyagi 40km A", + "22081": "off the coast of Miyagi 30km A", + "22090": "off the coast of Kinkasan, Miyagi", + "22091": "off the coast of Hirota Bay, Kesennuma", + "22095": "off the coast of Oshika, Miyagi", + "23001": "Akita", + "23090": "off the coast of Oga, Akita", + "24001": "Sakata", + "24030": "Tobishima", + "24031": "Nezugaseki, Tsuruoka City", + "24090": "off the coast of Sakata, Yamagata", + "25002": "Onahama, Iwaki City", + "25030": "Soma", + "25050": "off the coast of Fukushima 90km A", + "25060": "off the coast of Fukushima 70km A", + "25061": "off the coast of Fukushima 70km B", + "25070": "off the coast of Fukushima 50km A", + "25071": "off the coast of Fukushima 50km B", + "25080": "off the coast of Fukushima 30km A", + "25081": "off the coast of Fukushima 30km B", + "25090": "off the coast of Onahama, Fukushima", + "30001": "Oarai", + "30020": "Port Kashima, Kamisu City", + "30050": "off the coast of Ibaraki 90km A", + "30051": "off the coast of Ibaraki 90km B", + "30060": "off the coast of Ibaraki 70km A", + "30070": "off the coast of Ibaraki 60km A", + "30071": "off the coast of Ibaraki 50km A", + "30072": "off the coast of Ibaraki 50km B", + "30080": "off the coast of Ibaraki 40km A", + "30095": "off the coast of Kamisu, Ibaraki", + "31001": "Choshi", + "31002": "Okitsu, Katsuura City", + "31050": "off the east coast of Chiba 90km A", + "31051": "off the southeast coast of Chiba 90km A", + "31060": "off the east coast of Chiba 80km A", + "31061": "off the southeast coast of Chiba 80km A", + "31062": "off the east coast of Chiba 70km A", + "31063": "off the east coast of Chiba 70km B", + "31064": "off the southeast coast of Chiba 80km B", + "31070": "off the southeast coast of Chiba 60km A", + "31071": "off the east coast of Chiba 60km A", + "31072": "off the east coast of Chiba 60km B", + "31073": "off the southeast coast of Chiba 60km B", + "31074": "off the east coast of Chiba 50km A", + "31075": "off the east coast of Chiba 50km B", + "31080": "off the southeast coast of Chiba 40km A", + "31081": "off the southeast coast of Chiba 30km A", + "31082": "off the east coast of Chiba 40km A", + "31083": "off the southeast coast of Chiba 30km B", + "31084": "off the southeast coast of Chiba 30km C", + "31101": "Mera, Tateyama City", + "31202": "Harumi, Tokyo", + "31204": "Yokosuka", + "31205": "Chiba", + "31206": "Yokohama", + "32001": "Okada, Izu-Oshima", + "32002": "Tsubota, Miyakejima", + "32003": "Yaene, Hachijojima", + "32004": "Port Kozushima, Kozushima", + "32005": "Ako, Miyakejima", + "32006": "Kaminato, Hachijojima", + "32101": "Futami, Chichijima", + "32102": "Minamitorishima", + "33000": "Odawara", + "33001": "Port Misaki, Miura City", + "33030": "Aburatsubo, Miura City", + "33080": "off the coast of Kanagawa 40km", + "33095": "off the coast of Port Sagami, Kanagawa", + "34001": "Niigata", + "34003": "Awashima", + "34004": "Naoetsu, Joetsu City", + "34030": "Kujiranami, Kashiwazaki City", + "34103": "Washizaki, Sado City", + "34104": "Ogi, Sado City", + "35001": "Toyama", + "35021": "Minato, Fushiki-Toyama Ports", + "36001": "Nagahashi, Suzu City", + "36002": "Iida, Suzu City", + "36020": "Port Wajima", + "36021": "Port Nanao", + "36101": "Kanazawa", + "37003": "Mikuni, Sakai City", + "37020": "Port Tsuruga", + "38001": "Uchiura, Numazu City", + "38002": "Shimizu", + "38005": "Omaezaki", + "38006": "Maisaka", + "38007": "Port Teishi, Minamiizu Town", + "38020": "Port Shimoda", + "38030": "Ito", + "38031": "Tago, Nishiizu Town", + "38032": "Yaizu", + "38070": "off the coast of Shizuoka 50km", + "38090": "off the coast of Omaezaki, Shizuoka", + "39001": "Akabane, Tahara City", + "39090": "off the coast of Ise Bay", + "39101": "Nagoya", + "39102": "Kinuura, Handa City", + "39103": "Yokkaichi", + "39120": "Port Mikawa, Toyohashi City", + "40001": "Toba", + "40002": "Owase", + "40003": "Yuki, Kumano City", + "40050": "off the southeast coast of Mie 90km A", + "40060": "off the southeast coast of Mie 80km A", + "40061": "off the southeast coast of Mie 80km B", + "40062": "off the southeast coast of Mie 80km C", + "40063": "off the southeast coast of Mie 70km A", + "40070": "off the southeast coast of Mie 60km A", + "40071": "off the southeast coast of Mie 60km B", + "40072": "off the southeast coast of Mie 50km A", + "40080": "off the southeast coast of Mie 40km A", + "40081": "off the southeast coast of Mie 40km B", + "40082": "off the southeast coast of Mie 30km A", + "40090": "off the coast of Owase, Mie", + "50001": "Maizuru", + "51001": "Tenpozan, Osaka", + "51002": "Tannowa, Misaki Town", + "52001": "Tsuiyama, Toyooka City", + "52101": "Kobe", + "52102": "Himeji", + "52202": "Sumoto", + "53001": "Uragami, Nachikatsuura Town", + "53002": "Port Fukuro, Kushimoto Town", + "53004": "Wakayama", + "53006": "Haraido, Gobo City", + "53007": "Katata, Shirahama Town", + "53060": "off the coast of Wakayama 80km A", + "53061": "off the coast of Wakayama 80km B", + "53062": "off the coast of Wakayama 70km A", + "53063": "off the coast of Wakayama 70km B", + "53064": "off the coast of Wakayama 80km C", + "53065": "off the coast of Wakayama 80km D", + "53066": "off the coast of Wakayama 80km R", + "53067": "off the coast of Wakayama 70km C", + "53068": "off the coast of Wakayama 70km D", + "53069": "off the coast of Wakayama 70km E", + "53070": "off the coast of Wakayama 50km A", + "53071": "off the coast of Wakayama 50km B", + "53072": "off the coast of Wakayama 60km A", + "53073": "off the coast of Wakayama 60km B", + "53074": "off the coast of Wakayama 60km C", + "53075": "off the coast of Wakayama 50km C", + "53076": "off the coast of Wakayama 50km D", + "53077": "off the coast of Wakayama 50km E", + "53078": "off the coast of Wakayama 50km F", + "53079": "off the coast of Wakayama 40km A", + "53080": "off the coast of Wakayama 30km A", + "53081": "off the coast of Wakayama 30km B", + "53082": "off the coast of Wakayama 40km B", + "53083": "off the coast of Wakayama 40km C", + "53084": "off the coast of Wakayama 40km D", + "53085": "off the coast of Wakayama 40km E", + "53086": "off the coast of Wakayama 40km F", + "53087": "off the coast of Wakayama 40km G", + "53088": "off the coast of Wakayama 30km C", + "53089": "off the coast of Wakayama 30km D", + "53090": "off the coast of Shirahama, Wakayama", + "54001": "Sakaiminato City border", + "54030": "Tajiri, Iwami Town", + "55001": "Hamada", + "55101": "Saigo, Oki", + "56001": "Uno, Tamano City", + "57001": "Hiroshima", + "57002": "Kure", + "58001": "Komatsushima", + "58002": "Yuki, Tokushima", + "58070": "off the coast of Tokushima 50km A", + "58071": "off the coast of Tokushima 50km B", + "58080": "off the coast of Tokushima 40km A", + "58081": "off the coast of Tokushima 40km B", + "58090": "off the coast of Kaiyo, Tokushima", + "59001": "Takamatsu", + "59020": "Port Yoshima, Sakaide City", + "59022": "Port Tadotsu", + "60001": "Uwajima", + "60101": "Matsuyama", + "60121": "Umashima, Imabari City", + "61001": "Cape Muroto, Muroto City", + "61002": "Kochi", + "61003": "Tosashimizu", + "61020": "Port Susaki", + "61030": "Port Kure, Nakatosa Town", + "61050": "off the coast of Kochi 100km A", + "61051": "off the coast of Kochi 90km A", + "61052": "off the coast of Kochi 90km B", + "61060": "off the coast of Kochi 70km A", + "61061": "off the coast of Kochi 80km A", + "61062": "off the coast of Kochi 70km B", + "61063": "off the coast of Kochi 70km C", + "61064": "off the coast of Kochi 80km B", + "61070": "off the coast of Kochi 60km A", + "61071": "off the coast of Kochi 60km B", + "61072": "off the coast of Kochi 60km C", + "61090": "off the coast of Cape Ashizuri, Kochi", + "61091": "off the coast of Cape Muroto, Kochi", + "70021": "Port Haedomari, Shimonoseki City", + "70101": "Hikoshimadeshimatsu, Shimonoseki City", + "70102": "Tokuyama", + "70120": "Port Ube", + "70121": "Mitajiri-Nakanoseki Ports", + "70122": "Chofu, Port Shimonoseki", + "71002": "Moji, Kitakyushu City", + "71021": "Port Kanda", + "71022": "Aohama, Port Kitakyushu", + "71101": "Hakata, Fukuoka City", + "71120": "Hiagari, Port Kitakyushu", + "71201": "Miike, Omuta City", + "71202": "Nozaki, Oura, Tara Town", + "71203": "Misumi", + "71220": "Port Yatsushiro", + "71221": "Port Hondo, Amakusa City", + "71222": "Port Kumamoto", + "72020": "Port Karatsu", + "72030": "Kariya, Genkai Town", + "73001": "Nagasaki", + "73002": "Kuchinotsu", + "73003": "Port Fukue, Fukue Island", + "73004": "Sasebo", + "73020": "Kogo, Port Nagasaki", + "73021": "Port Tabira, Hirado City", + "73102": "Hitakatsu, Tsuima", + "73110": "Izuhara, Tsuima City", + "73120": "Port Gonoura, Iki Island", + "74000": "Tororo, Reihoku Town", + "75001": "Oita", + "75020": "Port Beppu", + "75100": "Matsuura, Saiki City", + "76001": "Hososhima, Hyuga City", + "76002": "Aburatsu, Nichinan City", + "76020": "Port Miyazaki", + "76050": "off the coast of Miyazaki 90km A", + "76051": "off the coast of Miyazaki 90km B", + "76070": "off the coast of Miyazaki 60km A", + "76071": "off the coast of Miyazaki 60km B", + "76080": "off the coast of Miyazaki 40km A", + "76090": "off the coast of Hyuga, Miyazaki", + "77002": "Odomari, Minamiosumi Town", + "77020": "Port Shibushi", + "77102": "Nishinoomote, Tanegashima", + "77103": "Kumano, Tanegashima", + "77203": "Nakanoshima", + "77204": "Kominato, Amami City", + "77205": "Naze, Amami City", + "77302": "Makurazaki", + "77303": "Kagoshima", + "77330": "Akune", + "80001": "Naha", + "80002": "Kumejima", + "80003": "Port of Nakagusuku Bay, Okinami City", + "80030": "Azama, Nanjo City", + "80102": "Port Minamidaito", + "80203": "Iriomote Island", + "80204": "Kubura, Yonaguni Island", + "80205": "Port Ishigaki, Ishigaki Island", + "80206": "Hirara, Miyako Island", + "91010": "off the coast of Kushiro 110km A", + "91011": "off the coast of Tokachi 110km A", + "91012": "off the coast of Tokachi 120km A", + "91020": "off the coast of Kushiro 130km A", + "91021": "off the coast of Kushiro 130km B", + "91030": "off the coast of Kushiro 150km A", + "91031": "off the coast of Tokachi 150km A", + "91032": "off the coast of Kushiro 160km A", + "91033": "off the coast of Kushiro 170km A", + "91040": "off the coast of Kushiro 180km A", + "92010": "off the east coast of Aomori 120km A", + "92030": "off the east coast of Aomori 160km A", + "92040": "off the east coast of Aomori 180km A", + "92041": "off the east coast of Aomori 200km A", + "92042": "off the east coast of Aomori 200km B", + "92060": "off the east coast of Aomori 260km A", + "92070": "off the east coast of Aomori 310km A", + "92110": "off the coast of Iwate 110km A", + "92111": "off the coast of Iwate 120km A", + "92112": "off the coast of Iwate 120km B", + "92120": "off the coast of Iwate 140km A", + "92121": "off the coast of Iwate 140km B", + "92122": "off the coast of Iwate 140km C", + "92130": "off the coast of Iwate 150km A", + "92131": "off the coast of Iwate 160km A", + "92132": "off the coast of Iwate 170km A", + "92133": "off the coast of Iwate 170km B", + "92134": "off the coast of Iwate 170km C", + "92150": "off the coast of Iwate 220km A", + "92151": "off the coast of Iwate 230km A", + "92152": "off the coast of Iwate 240km A", + "92210": "off the coast of Miyagi 110km A", + "92211": "off the coast of Miyagi 110km B", + "92212": "off the coast of Miyagi 120km A", + "92220": "off the coast of Miyagi 130km A", + "92221": "off the coast of Miyagi 140km A", + "92230": "off the coast of Miyagi 150km A", + "92231": "off the coast of Miyagi 160km A", + "92232": "off the coast of Miyagi 160km B", + "92240": "off the coast of Miyagi 180km A", + "92241": "off the coast of Miyagi 180km B", + "92242": "off the coast of Miyagi 190km A", + "92250": "off the coast of Miyagi 230km A", + "92251": "off the coast of Miyagi 240km A", + "92500": "off the coast of Fukushima 100km A", + "92510": "off the coast of Fukushima 120km A", + "92520": "off the coast of Fukushima 130km A", + "92521": "off the coast of Fukushima 140km A", + "92530": "off the coast of Fukushima 160km A", + "92531": "off the coast of Fukushima 170km A", + "92540": "off the coast of Fukushima 180km A", + "92550": "off the coast of Fukushima 240km A", + "92551": "off the coast of Fukushima 250km A", + "93010": "off the coast of Ibaraki 110km A", + "93011": "off the coast of Ibaraki 120km A", + "93020": "off the coast of Ibaraki 140km A", + "93021": "off the coast of Ibaraki 140km B", + "93030": "off the coast of Ibaraki 160km A", + "93031": "off the coast of Ibaraki 160km B", + "93050": "off the coast of Ibaraki 220km A", + "93051": "off the coast of Ibaraki 240km A", + "93100": "off the east coast of Chiba 100km A", + "93110": "off the east coast of Chiba 110km A", + "93111": "off the southeast coast of Chiba 110km A", + "93112": "off the southeast coast of Chiba 120km A", + "93113": "off the southeast coast of Chiba 120km B", + "93114": "off the southeast coast of Chiba 120km C", + "93120": "off the southeast coast of Chiba 140km A", + "93121": "off the southeast coast of Chiba 140km B", + "93130": "off the southeast coast of Chiba 160km A", + "93131": "off the east coast of Chiba 170km A", + "93140": "off the southeast coast of Chiba 180km A", + "93141": "off the east coast of Chiba 180km A", + "93142": "off the east coast of Chiba 190km A", + "93143": "off the east coast of Chiba 200km A", + "95300": "off the coast of Wakayama 100km A", + "95301": "off the coast of Wakayama 100km B", + "95302": "off the coast of Wakayama 100km C", + "95303": "off the coast of Wakayama 100km D", + "95310": "off the coast of Wakayama 110km A", + "96110": "off the coast of Kochi 110km A", + "96111": "off the coast of Kochi 120km A", + "96112": "off the coast of Kochi 120km B", + "96113": "off the coast of Kochi 120km C", + "96120": "off the coast of Kochi 130km A", + "96121": "off the coast of Kochi 140km A", + "97600": "off the coast of Miyazaki 100km A", + "97620": "off the coast of Miyazaki 130km A" + } +} \ No newline at end of file diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/PointTsunami/en.json.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/PointTsunami/en.json.meta new file mode 100644 index 0000000..03662c8 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/PointTsunami/en.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 712b528793e65804a93c599c593cf25a +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/PointTsunami/und.json b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/PointTsunami/und.json new file mode 100644 index 0000000..a4fad0d --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/PointTsunami/und.json @@ -0,0 +1,476 @@ +{ + "Culture": "ja-JP", + "Strings": { + "10001": "釧路", + "10002": "根室市花咲", + "10020": "根室港", + "10021": "浜中町霧多布港", + "10031": "ç¾…è‡¼æ¼æ¸¯", + "10034": "åŽšå²¸æ¼æ¸¯", + "10050": "釧路沖1ï¼ï¼ï½‹ï½ï¼¡", + "10060": "釧路沖8ï¼ï½‹ï½ï¼¡", + "10061": "釧路沖8ï¼ï½‹ï½ï¼¢", + "10062": "æ ¹å®¤å—æ±æ²–8ï¼ï½‹ï½ï¼¡", + "10070": "釧路沖6ï¼ï½‹ï½ï¼¡", + "10071": "æ ¹å®¤å—æ±æ²–5ï¼ï½‹ï½ï¼¡", + "10072": "釧路沖5ï¼ï½‹ï½ï¼¡", + "10073": "æ ¹å®¤å—æ±æ²–ï¼–ï¼ï½‹ï½ï¼¡", + "10100": "浦河", + "10101": "浦河", + "10102": "å勿¸¯", + "10103": "ãˆã‚Šã‚‚町庶野", + "10150": "å勿²–1ï¼ï¼ï½‹ï½ï¼¡", + "10151": "浦河沖1ï¼ï¼ï½‹ï½ï¼¡", + "10152": "浦河沖1ï¼ï¼ï½‹ï½ï¼¢", + "10153": "å勿²–ï¼™ï¼ï½‹ï½ï¼¡", + "10160": "å勿²–8ï¼ï½‹ï½ï¼¡", + "10161": "å勿²–8ï¼ï½‹ï½ï¼¢", + "10162": "å勿²–8ï¼ï½‹ï½ï¼£", + "10163": "浦河沖7ï¼ï½‹ï½ï¼¡", + "10170": "å勿²–ï¼–ï¼ï½‹ï½ï¼¡", + "10171": "浦河沖6ï¼ï½‹ï½ï¼¡", + "10172": "浦河沖5ï¼ï½‹ï½ï¼¡", + "10201": "室蘭", + "10202": "函館", + "10203": "è‹«å°ç‰§è¥¿æ¸¯", + "10204": "ç¦å³¶ç”ºå‰å²¡", + "10221": "è‹«å°ç‰§æ±æ¸¯", + "10222": "ç™½è€æ¸¯", + "10223": "渡島森港", + "10224": "室蘭港", + "10239": "å±±èƒŒæ³Šæ¼æ¸¯", + "11001": "稚内", + "11002": "ç•™èŒ", + "11003": "å°æ¨½", + "11022": "石狩湾新港", + "11023": "利尻島沓形港", + "11024": "羽幌港", + "11030": "å°æ¨½å¸‚å¿è·¯", + "11101": "寿都", + "11102": "江差", + "11121": "瀬棚港", + "11122": "岩内港", + "11123": "奥尻島奥尻港", + "11130": "å¥¥å°»å³¶æ¾æ±Ÿ", + "12001": "網走", + "12002": "紋別", + "12003": "æžå¹¸æ¸¯", + "12020": "紋別港", + "20001": "深浦", + "20002": "竜飛", + "20090": "é’æ£®æ·±æµ¦æ²–", + "20101": "八戸", + "20102": "ã‚€ã¤å¸‚関根浜", + "20120": "ã‚€ã¤å°å·åŽŸæ¸¯", + "20121": "八戸港", + "20150": "é’æ£®æ±æ–¹æ²–1ï¼ï¼ï½‹ï½ï¼¡", + "20151": "é’æ£®æ±æ–¹æ²–ï¼™ï¼ï½‹ï½ï¼¡", + "20160": "é’æ£®æ±æ–¹æ²–8ï¼ï½‹ï½ï¼¡", + "20170": "é’æ£®æ±æ–¹æ²–ï¼–ï¼ï½‹ï½ï¼¡", + "20171": "é’æ£®æ±æ–¹æ²–ï¼–ï¼ï½‹ï½ï¼¢", + "20172": "é’æ£®æ±æ–¹æ²–5ï¼ï½‹ï½ï¼¡", + "20173": "é’æ£®æ±æ–¹æ²–5ï¼ï½‹ï½ï¼¢", + "20180": "é’æ£®æ±æ–¹æ²–ï¼”ï¼ï½‹ï½ï¼¡", + "20181": "é’æ£®æ±æ–¹æ²–3ï¼ï½‹ï½ï¼¡", + "20190": "é’æ£®å…«æˆ¸æ²–", + "20201": "é’æ£®", + "20202": "ã‚€ã¤å¸‚大湊", + "21001": "å®®å¤", + "21002": "大船渡", + "21003": "釜石", + "21020": "久慈港", + "21050": "岩手沖9ï¼ï½‹ï½ï¼¡", + "21051": "岩手沖9ï¼ï½‹ï½ï¼¢", + "21060": "岩手沖7ï¼ï½‹ï½ï¼¡", + "21061": "岩手沖8ï¼ï½‹ï½ï¼¡", + "21070": "岩手沖6ï¼ï½‹ï½ï¼¡", + "21071": "岩手沖6ï¼ï½‹ï½ï¼¢", + "21072": "岩手沖6ï¼ï½‹ï½ï¼£", + "21080": "岩手沖4ï¼ï½‹ï½ï¼¡", + "21081": "岩手沖4ï¼ï½‹ï½ï¼¢", + "21082": "岩手沖4ï¼ï½‹ï½ï¼£", + "21083": "岩手沖3ï¼ï½‹ï½ï¼¡", + "21084": "岩手沖3ï¼ï½‹ï½ï¼¢", + "21090": "岩手釜石沖", + "21091": "å²©æ‰‹å®®å¤æ²–", + "21092": "岩手久慈沖", + "22001": "牡鹿町鮎å·", + "22002": "石巻市鮎å·", + "22021": "仙尿¸¯", + "22022": "石巻港", + "22050": "宮城沖9ï¼ï½‹ï½ï¼¡", + "22060": "宮城沖8ï¼ï½‹ï½ï¼¡", + "22061": "宮城沖8ï¼ï½‹ï½ï¼¢", + "22070": "宮城沖6ï¼ï½‹ï½ï¼¡", + "22071": "宮城沖5ï¼ï½‹ï½ï¼¡", + "22072": "宮城沖5ï¼ï½‹ï½ï¼¢", + "22080": "宮城沖4ï¼ï½‹ï½ï¼¡", + "22081": "宮城沖3ï¼ï½‹ï½ï¼¡", + "22090": "宮城金è¯å±±æ²–", + "22091": "気仙沼広田湾沖", + "22095": "宮城牡鹿沖", + "23001": "ç§‹ç”°", + "23090": "秋田男鹿沖", + "24001": "é…’ç”°", + "24030": "飛島", + "24031": "鶴岡市鼠ケ関", + "24090": "山形酒田沖", + "25002": "ã„ã‚ã市å°å浜", + "25030": "相馬", + "25050": "ç¦å³¶æ²–ï¼™ï¼ï½‹ï½ï¼¡", + "25060": "ç¦å³¶æ²–ï¼—ï¼ï½‹ï½ï¼¡", + "25061": "ç¦å³¶æ²–ï¼—ï¼ï½‹ï½ï¼¢", + "25070": "ç¦å³¶æ²–5ï¼ï½‹ï½ï¼¡", + "25071": "ç¦å³¶æ²–5ï¼ï½‹ï½ï¼¢", + "25080": "ç¦å³¶æ²–3ï¼ï½‹ï½ï¼¡", + "25081": "ç¦å³¶æ²–3ï¼ï½‹ï½ï¼¢", + "25090": "ç¦å³¶å°å浜沖", + "30001": "大洗", + "30020": "神栖市鹿島港", + "30050": "茨城沖9ï¼ï½‹ï½ï¼¡", + "30051": "茨城沖9ï¼ï½‹ï½ï¼¢", + "30060": "茨城沖7ï¼ï½‹ï½ï¼¡", + "30070": "茨城沖6ï¼ï½‹ï½ï¼¡", + "30071": "茨城沖5ï¼ï½‹ï½ï¼¡", + "30072": "茨城沖5ï¼ï½‹ï½ï¼¢", + "30080": "茨城沖4ï¼ï½‹ï½ï¼¡", + "30095": "茨城神栖沖", + "31001": "銚å­", + "31002": "勿µ¦å¸‚興津", + "31050": "åƒè‘‰æ±æ–¹æ²–ï¼™ï¼ï½‹ï½ï¼¡", + "31051": "åƒè‘‰å—æ±æ²–ï¼™ï¼ï½‹ï½ï¼¡", + "31060": "åƒè‘‰æ±æ–¹æ²–8ï¼ï½‹ï½ï¼¡", + "31061": "åƒè‘‰å—æ±æ²–8ï¼ï½‹ï½ï¼¡", + "31062": "åƒè‘‰æ±æ–¹æ²–ï¼—ï¼ï½‹ï½ï¼¡", + "31063": "åƒè‘‰æ±æ–¹æ²–ï¼—ï¼ï½‹ï½ï¼¢", + "31064": "åƒè‘‰å—æ±æ²–8ï¼ï½‹ï½ï¼¢", + "31070": "åƒè‘‰å—æ±æ²–ï¼–ï¼ï½‹ï½ï¼¡", + "31071": "åƒè‘‰æ±æ–¹æ²–ï¼–ï¼ï½‹ï½ï¼¡", + "31072": "åƒè‘‰æ±æ–¹æ²–ï¼–ï¼ï½‹ï½ï¼¢", + "31073": "åƒè‘‰å—æ±æ²–ï¼–ï¼ï½‹ï½ï¼¢", + "31074": "åƒè‘‰æ±æ–¹æ²–5ï¼ï½‹ï½ï¼¡", + "31075": "åƒè‘‰æ±æ–¹æ²–5ï¼ï½‹ï½ï¼¢", + "31080": "åƒè‘‰å—æ±æ²–ï¼”ï¼ï½‹ï½ï¼¡", + "31081": "åƒè‘‰å—æ±æ²–3ï¼ï½‹ï½ï¼¡", + "31082": "åƒè‘‰æ±æ–¹æ²–ï¼”ï¼ï½‹ï½ï¼¡", + "31083": "åƒè‘‰å—æ±æ²–3ï¼ï½‹ï½ï¼¢", + "31084": "åƒè‘‰å—æ±æ²–3ï¼ï½‹ï½ï¼£", + "31101": "館山市布良", + "31201": "åƒè‘‰", + "31202": "æ±äº¬æ™´æµ·", + "31203": "横浜", + "31204": "横須賀", + "31205": "åƒè‘‰", + "31206": "横浜", + "32001": "伊豆大島岡田", + "32002": "三宅島åªç”°", + "32003": "å…«ä¸ˆå³¶å…«é‡æ ¹", + "32004": "神津島神津島港", + "32005": "三宅島阿å¤", + "32006": "八丈島神湊", + "32101": "父島二見", + "32102": "å—鳥島", + "33000": "å°ç”°åŽŸ", + "33001": "ä¸‰æµ¦å¸‚ä¸‰å´Žæ¼æ¸¯", + "33030": "三浦市油壺", + "33080": "ç¥žå¥ˆå·æ²–ï¼”ï¼ï½‹ï½", + "33095": "神奈å·ç›¸æ¨¡æ¹¾æ²–", + "34001": "新潟", + "34003": "粟島", + "34004": "上越市直江津", + "34030": "æŸå´Žå¸‚鯨波", + "34101": "両津市鷲崎", + "34102": "使¸¡å¸‚鷲崎", + "34103": "使¸¡å¸‚鷲崎", + "34104": "使¸¡å¸‚å°æœ¨", + "34139": "å°æœ¨", + "35001": "富山", + "35021": "伿œ¨å¯Œå±±æ¸¯æ–°æ¹Š", + "36001": "ç æ´²å¸‚é•·æ©‹", + "36002": "ç æ´²å¸‚飯田", + "36020": "輪島港", + "36021": "七尾港", + "36101": "金沢", + "37003": "å‚井市三国", + "37020": "敦賀港", + "38001": "沼津市内浦", + "38002": "清水", + "38004": "å—伊豆町石廊崎", + "38005": "御å‰å´Ž", + "38006": "舞阪", + "38007": "å—伊豆町手石港", + "38020": "下田港", + "38030": "伊æ±", + "38031": "西伊豆町田å­", + "38032": "焼津", + "38034": "å—伊豆", + "38070": "é™å²¡æ²–5ï¼ï½‹ï½", + "38090": "é™å²¡å¾¡å‰å´Žæ²–", + "39001": "田原市赤羽根", + "39090": "ä¼Šå‹¢æ¹¾å£æ²–", + "39101": "åå¤å±‹", + "39102": "åŠç”°å¸‚衣浦", + "39103": "四日市", + "39120": "豊橋市三河港", + "40001": "鳥羽", + "40002": "尾鷲", + "40003": "ç†Šé‡Žå¸‚éŠæœ¨", + "40050": "三é‡å—æ±æ²–ï¼™ï¼ï½‹ï½ï¼¡", + "40060": "三é‡å—æ±æ²–8ï¼ï½‹ï½ï¼¡", + "40061": "三é‡å—æ±æ²–8ï¼ï½‹ï½ï¼¢", + "40062": "三é‡å—æ±æ²–8ï¼ï½‹ï½ï¼£", + "40063": "三é‡å—æ±æ²–ï¼—ï¼ï½‹ï½ï¼¡", + "40070": "三é‡å—æ±æ²–ï¼–ï¼ï½‹ï½ï¼¡", + "40071": "三é‡å—æ±æ²–ï¼–ï¼ï½‹ï½ï¼¢", + "40072": "三é‡å—æ±æ²–5ï¼ï½‹ï½ï¼¡", + "40080": "三é‡å—æ±æ²–ï¼”ï¼ï½‹ï½ï¼¡", + "40081": "三é‡å—æ±æ²–ï¼”ï¼ï½‹ï½ï¼¢", + "40082": "三é‡å—æ±æ²–3ï¼ï½‹ï½ï¼¡", + "40090": "三é‡å°¾é·²æ²–", + "50001": "舞鶴", + "51001": "大阪天ä¿å±±", + "51002": "岬町淡輪", + "52001": "豊岡市津居山", + "52101": "神戸", + "52102": "å§«è·¯", + "52201": "洲本", + "52202": "洲本", + "53001": "é‚£æ™ºå‹æµ¦ç”ºæµ¦ç¥ž", + "53002": "串本町袋港", + "53003": "白浜町細野", + "53004": "和歌山", + "53005": "御åŠ", + "53006": "御åŠå¸‚祓井戸", + "53007": "白浜町堅田", + "53060": "和歌山沖8ï¼ï½‹ï½ï¼¡", + "53061": "和歌山沖8ï¼ï½‹ï½ï¼¢", + "53062": "和歌山沖7ï¼ï½‹ï½ï¼¡", + "53063": "和歌山沖7ï¼ï½‹ï½ï¼¢", + "53064": "和歌山沖8ï¼ï½‹ï½ï¼£", + "53065": "和歌山沖8ï¼ï½‹ï½ï¼¤", + "53066": "和歌山沖8ï¼ï½‹ï½ï¼¥", + "53067": "和歌山沖7ï¼ï½‹ï½ï¼£", + "53068": "和歌山沖7ï¼ï½‹ï½ï¼¤", + "53069": "和歌山沖7ï¼ï½‹ï½ï¼¥", + "53070": "和歌山沖5ï¼ï½‹ï½ï¼¡", + "53071": "和歌山沖5ï¼ï½‹ï½ï¼¢", + "53072": "和歌山沖6ï¼ï½‹ï½ï¼¡", + "53073": "和歌山沖6ï¼ï½‹ï½ï¼¢", + "53074": "和歌山沖6ï¼ï½‹ï½ï¼£", + "53075": "和歌山沖5ï¼ï½‹ï½ï¼£", + "53076": "和歌山沖5ï¼ï½‹ï½ï¼¤", + "53077": "和歌山沖5ï¼ï½‹ï½ï¼¥", + "53078": "和歌山沖5ï¼ï½‹ï½ï¼¦", + "53079": "和歌山沖4ï¼ï½‹ï½ï¼¡", + "53080": "和歌山沖3ï¼ï½‹ï½ï¼¡", + "53081": "和歌山沖3ï¼ï½‹ï½ï¼¢", + "53082": "和歌山沖4ï¼ï½‹ï½ï¼¢", + "53083": "和歌山沖4ï¼ï½‹ï½ï¼£", + "53084": "和歌山沖4ï¼ï½‹ï½ï¼¤", + "53085": "和歌山沖4ï¼ï½‹ï½ï¼¥", + "53086": "和歌山沖4ï¼ï½‹ï½ï¼¦", + "53087": "和歌山沖4ï¼ï½‹ï½ï¼§", + "53088": "和歌山沖3ï¼ï½‹ï½ï¼£", + "53089": "和歌山沖3ï¼ï½‹ï½ï¼¤", + "53090": "和歌山白浜沖", + "54001": "境港市境", + "54030": "岩美町田後", + "55001": "浜田", + "55101": "éš å²è¥¿éƒ·", + "56001": "玉野市宇野", + "57001": "広島", + "57002": "呉", + "58001": "å°æ¾å³¶", + "58002": "徳島由å²", + "58070": "徳島沖5ï¼ï½‹ï½ï¼¡", + "58071": "徳島沖5ï¼ï½‹ï½ï¼¢", + "58080": "徳島沖4ï¼ï½‹ï½ï¼¡", + "58081": "徳島沖4ï¼ï½‹ï½ï¼¢", + "58090": "徳島海陽沖", + "59001": "高æ¾", + "59020": "å‚出市与島港", + "59022": "多度津港", + "60001": "宇和島", + "60101": "æ¾å±±", + "60120": "今治市å°å³¶", + "60121": "今治市馬島", + "61001": "室戸市室戸岬", + "61002": "高知", + "61003": "åœŸä½æ¸…æ°´", + "61020": "須崎港", + "61030": "中土ä½ç”ºä¹…礼港", + "61050": "高知沖1ï¼ï¼ï½‹ï½ï¼¡", + "61051": "高知沖9ï¼ï½‹ï½ï¼¡", + "61052": "高知沖9ï¼ï½‹ï½ï¼¢", + "61060": "高知沖7ï¼ï½‹ï½ï¼¡", + "61061": "高知沖8ï¼ï½‹ï½ï¼¡", + "61062": "高知沖7ï¼ï½‹ï½ï¼¢", + "61063": "高知沖7ï¼ï½‹ï½ï¼£", + "61064": "高知沖8ï¼ï½‹ï½ï¼¢", + "61070": "高知沖6ï¼ï½‹ï½ï¼¡", + "61071": "高知沖6ï¼ï½‹ï½ï¼¢", + "61072": "高知沖6ï¼ï½‹ï½ï¼£", + "61090": "高知足摺岬沖", + "61091": "高知室戸岬沖", + "70021": "下関市å—風泊港", + "70101": "下関市彦島弟å­å¾…", + "70102": "徳山", + "70120": "宇部港", + "70121": "三田尻中関港", + "70122": "下関港長府", + "71001": "北ä¹å·žå¸‚é–€å¸", + "71002": "北ä¹å·žå¸‚é–€å¸", + "71021": "苅田港", + "71022": "北ä¹å·žæ¸¯é’浜", + "71101": "ç¦å²¡å¸‚åšå¤š", + "71120": "北ä¹å·žæ¸¯æ—¥æ˜Ž", + "71201": "大牟田市三池", + "71202": "太良町大浦野崎", + "71203": "三角", + "71220": "八代港", + "71221": "天è‰å¸‚本渡港", + "71222": "熊本港", + "72020": "唿´¥æ¸¯", + "72030": "玄海町仮屋", + "73001": "é•·å´Ž", + "73002": "å£ä¹‹æ´¥", + "73003": "ç¦æ±Ÿå³¶ç¦æ±Ÿæ¸¯", + "73004": "ä½ä¸–ä¿", + "73020": "長崎港皇åŽ", + "73021": "平戸市田平港", + "73101": "対馬美津島", + "73102": "対馬比田å‹", + "73110": "対馬市厳原", + "73120": "壱å²å³¶éƒ·ãƒŽæµ¦æ¸¯", + "74000": "苓北町都呂々", + "75001": "大分", + "75020": "別府港", + "75100": "ä½ä¼¯å¸‚æ¾æµ¦", + "76001": "æ—¥å‘市細島", + "76002": "æ—¥å—市油津", + "76020": "宮崎港", + "76050": "宮崎沖9ï¼ï½‹ï½ï¼¡", + "76051": "宮崎沖9ï¼ï½‹ï½ï¼¢", + "76070": "宮崎沖6ï¼ï½‹ï½ï¼¡", + "76071": "宮崎沖6ï¼ï½‹ï½ï¼¢", + "76080": "宮崎沖4ï¼ï½‹ï½ï¼¡", + "76090": "å®®å´Žæ—¥å‘æ²–", + "77001": "ä½å¤šç”ºå¤§æ³Š", + "77002": "å—大隅町大泊", + "77020": "志布志港", + "77101": "種å­å³¶ç”°ä¹‹è„‡", + "77102": "種å­å³¶è¥¿ä¹‹è¡¨", + "77103": "種å­å³¶ç†Šé‡Ž", + "77201": "åç€¬å¸‚å°æ¹Š", + "77202": "å瀬市å瀬", + "77203": "中之島", + "77204": "å¥„ç¾Žå¸‚å°æ¹Š", + "77205": "奄美市å瀬", + "77301": "鹿å…å³¶", + "77302": "枕崎", + "77303": "鹿å…å³¶", + "77330": "阿久根", + "80001": "那覇", + "80002": "久米島", + "80003": "沖縄市中城湾港", + "80030": "å—城市安座真", + "80102": "å—å¤§æ±æ¼æ¸¯", + "80201": "å®®å¤å³¶å¹³è‰¯", + "80202": "石垣島石垣港", + "80203": "西表島", + "80204": "与那国島久部良", + "80205": "石垣島石垣港", + "80206": "å®®å¤å³¶å¹³è‰¯", + "91010": "釧路沖11ï¼ï½‹ï½ï¼¡", + "91011": "å勿²–11ï¼ï½‹ï½ï¼¡", + "91012": "å勿²–12ï¼ï½‹ï½ï¼¡", + "91020": "釧路沖13ï¼ï½‹ï½ï¼¡", + "91021": "釧路沖13ï¼ï½‹ï½ï¼¢", + "91030": "釧路沖15ï¼ï½‹ï½ï¼¡", + "91031": "å勿²–15ï¼ï½‹ï½ï¼¡", + "91032": "釧路沖16ï¼ï½‹ï½ï¼¡", + "91033": "釧路沖17ï¼ï½‹ï½ï¼¡", + "91040": "釧路沖18ï¼ï½‹ï½ï¼¡", + "92010": "é’æ£®æ±æ–¹æ²–12ï¼ï½‹ï½ï¼¡", + "92030": "é’æ£®æ±æ–¹æ²–16ï¼ï½‹ï½ï¼¡", + "92040": "é’æ£®æ±æ–¹æ²–18ï¼ï½‹ï½ï¼¡", + "92041": "é’æ£®æ±æ–¹æ²–ï¼’ï¼ï¼ï½‹ï½ï¼¡", + "92042": "é’æ£®æ±æ–¹æ²–ï¼’ï¼ï¼ï½‹ï½ï¼¢", + "92060": "é’æ£®æ±æ–¹æ²–ï¼’ï¼–ï¼ï½‹ï½ï¼¡", + "92070": "é’æ£®æ±æ–¹æ²–31ï¼ï½‹ï½ï¼¡", + "92110": "岩手沖11ï¼ï½‹ï½ï¼¡", + "92111": "岩手沖12ï¼ï½‹ï½ï¼¡", + "92112": "岩手沖12ï¼ï½‹ï½ï¼¢", + "92120": "岩手沖14ï¼ï½‹ï½ï¼¡", + "92121": "岩手沖14ï¼ï½‹ï½ï¼¢", + "92122": "岩手沖14ï¼ï½‹ï½ï¼£", + "92130": "岩手沖15ï¼ï½‹ï½ï¼¡", + "92131": "岩手沖16ï¼ï½‹ï½ï¼¡", + "92132": "岩手沖17ï¼ï½‹ï½ï¼¡", + "92133": "岩手沖17ï¼ï½‹ï½ï¼¢", + "92134": "岩手沖17ï¼ï½‹ï½ï¼£", + "92150": "岩手沖22ï¼ï½‹ï½ï¼¡", + "92151": "岩手沖23ï¼ï½‹ï½ï¼¡", + "92152": "岩手沖24ï¼ï½‹ï½ï¼¡", + "92170": "岩手沖38ï¼ï½‹ï½ï¼¡", + "92171": "岩手沖32ï¼ï½‹ï½ï¼¡", + "92210": "宮城沖11ï¼ï½‹ï½ï¼¡", + "92211": "宮城沖11ï¼ï½‹ï½ï¼¢", + "92212": "宮城沖12ï¼ï½‹ï½ï¼¡", + "92220": "宮城沖13ï¼ï½‹ï½ï¼¡", + "92221": "宮城沖14ï¼ï½‹ï½ï¼¡", + "92230": "宮城沖15ï¼ï½‹ï½ï¼¡", + "92231": "宮城沖16ï¼ï½‹ï½ï¼¡", + "92232": "宮城沖16ï¼ï½‹ï½ï¼¢", + "92240": "宮城沖18ï¼ï½‹ï½ï¼¡", + "92241": "宮城沖18ï¼ï½‹ï½ï¼¢", + "92242": "宮城沖19ï¼ï½‹ï½ï¼¡", + "92250": "宮城沖23ï¼ï½‹ï½ï¼¡", + "92251": "宮城沖24ï¼ï½‹ï½ï¼¡", + "92270": "宮城沖35ï¼ï½‹ï½ï¼¡", + "92500": "ç¦å³¶æ²–1ï¼ï¼ï½‹ï½ï¼¡", + "92510": "ç¦å³¶æ²–12ï¼ï½‹ï½ï¼¡", + "92520": "ç¦å³¶æ²–13ï¼ï½‹ï½ï¼¡", + "92521": "ç¦å³¶æ²–14ï¼ï½‹ï½ï¼¡", + "92530": "ç¦å³¶æ²–16ï¼ï½‹ï½ï¼¡", + "92531": "ç¦å³¶æ²–17ï¼ï½‹ï½ï¼¡", + "92540": "ç¦å³¶æ²–18ï¼ï½‹ï½ï¼¡", + "92550": "ç¦å³¶æ²–ï¼’ï¼”ï¼ï½‹ï½ï¼¡", + "92551": "ç¦å³¶æ²–25ï¼ï½‹ï½ï¼¡", + "93010": "茨城沖11ï¼ï½‹ï½ï¼¡", + "93011": "茨城沖12ï¼ï½‹ï½ï¼¡", + "93020": "茨城沖14ï¼ï½‹ï½ï¼¡", + "93021": "茨城沖14ï¼ï½‹ï½ï¼¢", + "93030": "茨城沖16ï¼ï½‹ï½ï¼¡", + "93031": "茨城沖16ï¼ï½‹ï½ï¼¢", + "93050": "茨城沖22ï¼ï½‹ï½ï¼¡", + "93051": "茨城沖24ï¼ï½‹ï½ï¼¡", + "93100": "åƒè‘‰æ±æ–¹æ²–1ï¼ï¼ï½‹ï½ï¼¡", + "93110": "åƒè‘‰æ±æ–¹æ²–11ï¼ï½‹ï½ï¼¡", + "93111": "åƒè‘‰å—æ±æ²–11ï¼ï½‹ï½ï¼¡", + "93112": "åƒè‘‰å—æ±æ²–12ï¼ï½‹ï½ï¼¡", + "93113": "åƒè‘‰å—æ±æ²–12ï¼ï½‹ï½ï¼¢", + "93114": "åƒè‘‰å—æ±æ²–12ï¼ï½‹ï½ï¼£", + "93120": "åƒè‘‰å—æ±æ²–14ï¼ï½‹ï½ï¼¡", + "93121": "åƒè‘‰å—æ±æ²–14ï¼ï½‹ï½ï¼¢", + "93130": "åƒè‘‰å—æ±æ²–16ï¼ï½‹ï½ï¼¡", + "93131": "åƒè‘‰æ±æ–¹æ²–17ï¼ï½‹ï½ï¼¡", + "93140": "åƒè‘‰å—æ±æ²–18ï¼ï½‹ï½ï¼¡", + "93141": "åƒè‘‰æ±æ–¹æ²–18ï¼ï½‹ï½ï¼¡", + "93142": "åƒè‘‰æ±æ–¹æ²–19ï¼ï½‹ï½ï¼¡", + "93143": "åƒè‘‰æ±æ–¹æ²–ï¼’ï¼ï¼ï½‹ï½ï¼¡", + "95300": "和歌山沖1ï¼ï¼ï½‹ï½ï¼¡", + "95301": "和歌山沖1ï¼ï¼ï½‹ï½ï¼¢", + "95302": "和歌山沖1ï¼ï¼ï½‹ï½ï¼£", + "95303": "和歌山沖1ï¼ï¼ï½‹ï½ï¼¤", + "95310": "和歌山沖11ï¼ï½‹ï½ï¼¡", + "96110": "高知沖11ï¼ï½‹ï½ï¼¡", + "96111": "高知沖12ï¼ï½‹ï½ï¼¡", + "96112": "高知沖12ï¼ï½‹ï½ï¼¢", + "96113": "高知沖12ï¼ï½‹ï½ï¼£", + "96120": "高知沖13ï¼ï½‹ï½ï¼¡", + "96121": "高知沖14ï¼ï½‹ï½ï¼¡", + "97600": "宮崎沖1ï¼ï¼ï½‹ï½ï¼¡", + "97620": "宮崎沖13ï¼ï½‹ï½ï¼¡" + } +} \ No newline at end of file diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/PointTsunami/und.json.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/PointTsunami/und.json.meta new file mode 100644 index 0000000..cefe410 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/PointTsunami/und.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 3de29c1536142d04c8470e285143c478 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/PointTsunami/yue.json b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/PointTsunami/yue.json new file mode 100644 index 0000000..ecee9aa --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/PointTsunami/yue.json @@ -0,0 +1,476 @@ +{ + "Culture": "yue-HK", + "Strings": { + "10001": "釧路", + "10002": "根室市花咲", + "10020": "根室港", + "10021": "濱中町霧多布港", + "10031": "ç¾…è‡¼æ¼æ¸¯", + "10034": "åŽšå²¸æ¼æ¸¯", + "10050": "釧路離岸100kmA", + "10060": "釧路離岸80kmA", + "10061": "釧路離岸80kmB", + "10062": "根室æ±å—離岸80kmA", + "10070": "釧路離岸60kmA", + "10071": "根室æ±å—離岸50kmA", + "10072": "釧路離岸50kmA", + "10073": "根室æ±å—離岸60kmA", + "10100": "浦河", + "10101": "浦河", + "10102": "å勿¸¯", + "10103": "襟裳町庶野", + "10150": "åå‹é›¢å²¸100kmA", + "10151": "浦河離岸100kmA", + "10152": "浦河離岸100kmB", + "10153": "åå‹é›¢å²¸90kmA", + "10160": "åå‹é›¢å²¸80kmA", + "10161": "åå‹é›¢å²¸80kmB", + "10162": "åå‹é›¢å²¸80kmC", + "10163": "浦河離岸70kmA", + "10170": "åå‹é›¢å²¸60kmA", + "10171": "浦河離岸60kmA", + "10172": "浦河離岸50kmA", + "10201": "室蘭", + "10202": "函館", + "10203": "è‹«å°ç‰§è¥¿æ¸¯", + "10204": "ç¦å³¶ç”ºå‰å²¡", + "10221": "è‹«å°ç‰§æ±æ¸¯", + "10222": "ç™½è€æ¸¯", + "10223": "渡島森港", + "10224": "室蘭港", + "10239": "å±±èƒŒæ³Šæ¼æ¸¯", + "11001": "稚内", + "11002": "ç•™èŒ", + "11003": "å°æ¨½", + "11022": "石狩湾新港", + "11023": "利尻島沓形港", + "11024": "羽幌港", + "11030": "å°æ¨½å¸‚å¿è·¯", + "11101": "壽都", + "11102": "江差", + "11121": "瀨棚港", + "11122": "岩内港", + "11123": "奥尻島奥尻港", + "11130": "å¥¥å°»å³¶æ¾æ±Ÿ", + "12001": "網走", + "12002": "紋別", + "12003": "æžå¹¸æ¸¯", + "12020": "紋別港", + "20001": "深浦", + "20002": "é¾é£›", + "20090": "é’æ£®æ·±æµ¦å¤–æµ·", + "20101": "八戶", + "20102": "陸奧市関根濱", + "20120": "陸奧å°å·åŽŸæ¸¯", + "20121": "八戶港", + "20150": "é’æ£®æ±æ–¹é›¢å²¸100kmA", + "20151": "é’æ£®æ±æ–¹é›¢å²¸90kmA", + "20160": "é’æ£®æ±æ–¹é›¢å²¸80kmA", + "20170": "é’æ£®æ±æ–¹é›¢å²¸60kmA", + "20171": "é’æ£®æ±æ–¹é›¢å²¸60kmB", + "20172": "é’æ£®æ±æ–¹é›¢å²¸50kmA", + "20173": "é’æ£®æ±æ–¹é›¢å²¸50kmB", + "20180": "é’æ£®æ±æ–¹é›¢å²¸40kmA", + "20181": "é’æ£®æ±æ–¹é›¢å²¸30kmA", + "20190": "é’æ£®å…«æˆ¶å¤–æµ·", + "20201": "é’æ£®", + "20202": "陸奧市大湊", + "21001": "å®®å¤", + "21002": "大船渡", + "21003": "釜石", + "21020": "久慈港", + "21050": "岩手離岸90kmA", + "21051": "岩手離岸90kmB", + "21060": "岩手離岸70kmA", + "21061": "岩手離岸80kmA", + "21070": "岩手離岸60kmA", + "21071": "岩手離岸60kmB", + "21072": "岩手離岸60kmC", + "21080": "岩手離岸40kmA", + "21081": "岩手離岸40kmB", + "21082": "岩手離岸40kmC", + "21083": "岩手離岸30kmA", + "21084": "岩手離岸30kmB", + "21090": "岩手釜石外海", + "21091": "岩手宮å¤å¤–æµ·", + "21092": "岩手久慈外海", + "22001": "牡鹿町鮎å·", + "22002": "石å·å¸‚鮎å·", + "22021": "仙尿¸¯", + "22022": "çŸ³å·æ¸¯", + "22050": "宮城離岸90kmA", + "22060": "宮城離岸80kmA", + "22061": "宮城離岸80kmB", + "22070": "宮城離岸60kmA", + "22071": "宮城離岸50kmA", + "22072": "宮城離岸50kmB", + "22080": "宮城離岸40kmA", + "22081": "宮城離岸30kmA", + "22090": "宮城金è¯å±±å¤–æµ·", + "22091": "氣仙沼廣田湾外海", + "22095": "宮城牡鹿外海", + "23001": "ç§‹ç”°", + "23090": "秋田男鹿外海", + "24001": "é…’ç”°", + "24030": "飛島", + "24031": "鶴岡市鼠関", + "24090": "山形酒田外海", + "25002": "ç£åŸŽå¸‚å°å濱", + "25030": "相馬", + "25050": "ç¦å³¶é›¢å²¸90kmA", + "25060": "ç¦å³¶é›¢å²¸70kmA", + "25061": "ç¦å³¶é›¢å²¸70kmB", + "25070": "ç¦å³¶é›¢å²¸50kmA", + "25071": "ç¦å³¶é›¢å²¸50kmB", + "25080": "ç¦å³¶é›¢å²¸30kmA", + "25081": "ç¦å³¶é›¢å²¸30kmB", + "25090": "ç¦å³¶å°å濱外海", + "30001": "大洗", + "30020": "神栖市鹿島港", + "30050": "茨城離岸90kmA", + "30051": "茨城離岸90kmB", + "30060": "茨城離岸70kmA", + "30070": "茨城離岸60kmA", + "30071": "茨城離岸50kmA", + "30072": "茨城離岸50kmB", + "30080": "茨城離岸40kmA", + "30095": "茨城神栖外海", + "31001": "銚å­", + "31002": "勿µ¦å¸‚興津", + "31050": "åƒè‘‰æ±æ–¹é›¢å²¸90kmA", + "31051": "åƒè‘‰æ±å—離岸90kmA", + "31060": "åƒè‘‰æ±æ–¹é›¢å²¸80kmA", + "31061": "åƒè‘‰æ±å—離岸80kmA", + "31062": "åƒè‘‰æ±æ–¹é›¢å²¸70kmA", + "31063": "åƒè‘‰æ±æ–¹é›¢å²¸70kmB", + "31064": "åƒè‘‰æ±å—離岸80kmB", + "31070": "åƒè‘‰æ±å—離岸60kmA", + "31071": "åƒè‘‰æ±æ–¹é›¢å²¸60kmA", + "31072": "åƒè‘‰æ±æ–¹é›¢å²¸60kmB", + "31073": "åƒè‘‰æ±å—離岸60kmB", + "31074": "åƒè‘‰æ±æ–¹é›¢å²¸50kmA", + "31075": "åƒè‘‰æ±æ–¹é›¢å²¸50kmB", + "31080": "åƒè‘‰æ±å—離岸40kmA", + "31081": "åƒè‘‰æ±å—離岸30kmA", + "31082": "åƒè‘‰æ±æ–¹é›¢å²¸40kmA", + "31083": "åƒè‘‰æ±å—離岸30kmB", + "31084": "åƒè‘‰æ±å—離岸30kmC", + "31101": "館山市布良", + "31201": "åƒè‘‰", + "31202": "æ±äº¬æ™´æµ·", + "31203": "横濱", + "31204": "横須賀", + "31205": "åƒè‘‰", + "31206": "横濱", + "32001": "伊豆大島岡田", + "32002": "三宅島åªç”°", + "32003": "å…«ä¸ˆå³¶å…«é‡æ ¹", + "32004": "神津島神津島港", + "32005": "三宅島阿å¤", + "32006": "八丈島神湊", + "32101": "父島二見", + "32102": "å—鳥島", + "33000": "å°ç”°åŽŸ", + "33001": "ä¸‰æµ¦å¸‚ä¸‰å´Žæ¼æ¸¯", + "33030": "三浦市油壺", + "33080": "神奈å·é›¢å²¸40km", + "33095": "神奈å·ç›¸æ¨¡æ¹¾å¤–æµ·", + "34001": "新潟", + "34003": "粟島", + "34004": "上越市直江津", + "34030": "æŸå´Žå¸‚鯨波", + "34101": "兩津市鷲崎", + "34102": "使¸¡å¸‚鷲崎", + "34103": "使¸¡å¸‚鷲崎", + "34104": "使¸¡å¸‚å°æœ¨", + "34139": "å°æœ¨", + "35001": "富山", + "35021": "伿œ¨å¯Œå±±æ¸¯æ–°æ¹Š", + "36001": "ç æ´²å¸‚é•·æ©‹", + "36002": "ç æ´²å¸‚飯田", + "36020": "輪島港", + "36021": "七尾港", + "36101": "金澤", + "37003": "å‚井市三國", + "37020": "敦賀港", + "38001": "沼津市内浦", + "38002": "清水", + "38004": "å—伊豆町石廊崎", + "38005": "御å‰å´Ž", + "38006": "舞阪", + "38007": "å—伊豆町手石港", + "38020": "下田港", + "38030": "伊æ±", + "38031": "西伊豆町田å­", + "38032": "燒津", + "38034": "å—伊豆", + "38070": "é™å²¡é›¢å²¸50km", + "38090": "é™å²¡å¾¡å‰å´Žå¤–æµ·", + "39001": "田原市赤羽根", + "39090": "伊勢湾å£å¤–æµ·", + "39101": "åå¤å±‹", + "39102": "åŠç”°å¸‚衣浦", + "39103": "四日市", + "39120": "è±æ©‹å¸‚三河港", + "40001": "鳥羽", + "40002": "尾鷲", + "40003": "ç†Šé‡Žå¸‚éŠæœ¨", + "40050": "䏉釿±å—離岸90kmA", + "40060": "䏉釿±å—離岸80kmA", + "40061": "䏉釿±å—離岸80kmB", + "40062": "䏉釿±å—離岸80kmC", + "40063": "䏉釿±å—離岸70kmA", + "40070": "䏉釿±å—離岸60kmA", + "40071": "䏉釿±å—離岸60kmB", + "40072": "䏉釿±å—離岸50kmA", + "40080": "䏉釿±å—離岸40kmA", + "40081": "䏉釿±å—離岸40kmB", + "40082": "䏉釿±å—離岸30kmA", + "40090": "三é‡å°¾é·²å¤–æµ·", + "50001": "舞鶴", + "51001": "大阪天ä¿å±±", + "51002": "岬町淡輪", + "52001": "è±å²¡å¸‚津居山", + "52101": "神戶", + "52102": "姬路", + "52201": "洲本", + "52202": "洲本", + "53001": "é‚£æ™ºå‹æµ¦ç”ºæµ¦ç¥ž", + "53002": "串本町袋港", + "53003": "白濱町細野", + "53004": "和歌山", + "53005": "御åŠ", + "53006": "御åŠå¸‚祓井戶", + "53007": "白濱町堅田", + "53060": "和歌山離岸80kmA", + "53061": "和歌山離岸80kmB", + "53062": "和歌山離岸70kmA", + "53063": "和歌山離岸70kmB", + "53064": "和歌山離岸80kmC", + "53065": "和歌山離岸80kmD", + "53066": "和歌山離岸80kmE", + "53067": "和歌山離岸70kmC", + "53068": "和歌山離岸70kmD", + "53069": "和歌山離岸70kmE", + "53070": "和歌山離岸50kmA", + "53071": "和歌山離岸50kmB", + "53072": "和歌山離岸60kmA", + "53073": "和歌山離岸60kmB", + "53074": "和歌山離岸60kmC", + "53075": "和歌山離岸50kmC", + "53076": "和歌山離岸50kmD", + "53077": "和歌山離岸50kmE", + "53078": "和歌山離岸50kmF", + "53079": "和歌山離岸40kmA", + "53080": "和歌山離岸30kmA", + "53081": "和歌山離岸30kmB", + "53082": "和歌山離岸40kmB", + "53083": "和歌山離岸40kmC", + "53084": "和歌山離岸40kmD", + "53085": "和歌山離岸40kmE", + "53086": "和歌山離岸40kmF", + "53087": "和歌山離岸40kmG", + "53088": "和歌山離岸30kmC", + "53089": "和歌山離岸30kmD", + "53090": "和歌山白濱外海", + "54001": "境港市境", + "54030": "岩美町田後", + "55001": "濱田", + "55101": "éš±å²è¥¿é„‰", + "56001": "玉野市宇野", + "57001": "廣島", + "57002": "å³", + "58001": "å°æ¾å³¶", + "58002": "å¾·å³¶ç”±å²", + "58070": "德島離岸50kmA", + "58071": "德島離岸50kmB", + "58080": "德島離岸40kmA", + "58081": "德島離岸40kmB", + "58090": "德島海陽外海", + "59001": "高æ¾", + "59020": "å‚出市与島港", + "59022": "多度津港", + "60001": "宇和島", + "60101": "æ¾å±±", + "60120": "今治市å°å³¶", + "60121": "今治市馬島", + "61001": "室戶市室戶岬", + "61002": "高知", + "61003": "åœŸä½æ¸…æ°´", + "61020": "須崎港", + "61030": "中土ä½ç”ºä¹…礼港", + "61050": "高知離岸100kmA", + "61051": "高知離岸90kmA", + "61052": "高知離岸90kmB", + "61060": "高知離岸70kmA", + "61061": "高知離岸80kmA", + "61062": "高知離岸70kmB", + "61063": "高知離岸70kmC", + "61064": "高知離岸80kmB", + "61070": "高知離岸60kmA", + "61071": "高知離岸60kmB", + "61072": "高知離岸60kmC", + "61090": "高知足摺岬外海", + "61091": "高知室戶岬外海", + "70021": "下関市å—風泊港", + "70101": "下関市彦島弟å­å¾…", + "70102": "å¾·å±±", + "70120": "宇部港", + "70121": "三田尻中関港", + "70122": "下関港長府", + "71001": "北ä¹å·žå¸‚é–€å¸", + "71002": "北ä¹å·žå¸‚é–€å¸", + "71021": "苅田港", + "71022": "北ä¹å·žæ¸¯é’濱", + "71101": "ç¦å²¡å¸‚åšå¤š", + "71120": "北ä¹å·žæ¸¯æ—¥æ˜Ž", + "71201": "大牟田市三池", + "71202": "太良町大浦野崎", + "71203": "三角", + "71220": "八代港", + "71221": "天è‰å¸‚本渡港", + "71222": "熊本港", + "72020": "唿´¥æ¸¯", + "72030": "玄海町å‡å±‹", + "73001": "é•·å´Ž", + "73002": "å£ä¹‹æ´¥", + "73003": "ç¦æ±Ÿå³¶ç¦æ±Ÿæ¸¯", + "73004": "ä½ä¸–ä¿", + "73020": "長崎港皇åŽ", + "73021": "平戶市田平港", + "73101": "å°é¦¬ç¾Žæ´¥å³¶", + "73102": "å°é¦¬æ¯”ç”°å‹", + "73110": "å°é¦¬å¸‚嚴原", + "73120": "壹å²å³¶é„‰ä¹‹æµ¦æ¸¯", + "74000": "苓北町都呂呂", + "75001": "大分", + "75020": "別府港", + "75100": "ä½ä¼¯å¸‚æ¾æµ¦", + "76001": "æ—¥å‘市細島", + "76002": "æ—¥å—市油津", + "76020": "宮崎港", + "76050": "宮崎離岸90kmA", + "76051": "宮崎離岸90kmB", + "76070": "宮崎離岸60kmA", + "76071": "宮崎離岸60kmB", + "76080": "宮崎離岸40kmA", + "76090": "宮崎日å‘外海", + "77001": "ä½å¤šç”ºå¤§æ³Š", + "77002": "å—大隅町大泊", + "77020": "志布志港", + "77101": "種å­å³¶ç”°ä¹‹è„‡", + "77102": "種å­å³¶è¥¿ä¹‹è¡¨", + "77103": "種å­å³¶ç†Šé‡Ž", + "77201": "åç€¨å¸‚å°æ¹Š", + "77202": "å瀨市å瀨", + "77203": "中之島", + "77204": "å¥„ç¾Žå¸‚å°æ¹Š", + "77205": "奄美市å瀨", + "77301": "鹿兒島", + "77302": "枕崎", + "77303": "鹿兒島", + "77330": "阿久根", + "80001": "那霸", + "80002": "久米島", + "80003": "沖繩市中城湾港", + "80030": "å—城市安座真", + "80102": "å—å¤§æ±æ¼æ¸¯", + "80201": "å®®å¤å³¶å¹³è‰¯", + "80202": "石垣島石垣港", + "80203": "西表島", + "80204": "与那国島久部良", + "80205": "石垣島石垣港", + "80206": "å®®å¤å³¶å¹³è‰¯", + "91010": "釧路離岸110kmA", + "91011": "åå‹é›¢å²¸110kmA", + "91012": "åå‹é›¢å²¸120kmA", + "91020": "釧路離岸130kmA", + "91021": "釧路離岸130kmB", + "91030": "釧路離岸150kmA", + "91031": "åå‹é›¢å²¸150kmA", + "91032": "釧路離岸160kmA", + "91033": "釧路離岸170kmA", + "91040": "釧路離岸180kmA", + "92010": "é’æ£®æ±æ–¹é›¢å²¸120kmA", + "92030": "é’æ£®æ±æ–¹é›¢å²¸160kmA", + "92040": "é’æ£®æ±æ–¹é›¢å²¸180kmA", + "92041": "é’æ£®æ±æ–¹é›¢å²¸200kmA", + "92042": "é’æ£®æ±æ–¹é›¢å²¸200kmB", + "92060": "é’æ£®æ±æ–¹é›¢å²¸260kmA", + "92070": "é’æ£®æ±æ–¹é›¢å²¸310kmA", + "92110": "岩手離岸110kmA", + "92111": "岩手離岸120kmA", + "92112": "岩手離岸120kmB", + "92120": "岩手離岸140kmA", + "92121": "岩手離岸140kmB", + "92122": "岩手離岸140kmC", + "92130": "岩手離岸150kmA", + "92131": "岩手離岸160kmA", + "92132": "岩手離岸170kmA", + "92133": "岩手離岸170kmB", + "92134": "岩手離岸170kmC", + "92150": "岩手離岸220kmA", + "92151": "岩手離岸230kmA", + "92152": "岩手離岸240kmA", + "92170": "岩手離岸380kmA", + "92171": "岩手離岸320kmA", + "92210": "宮城離岸110kmA", + "92211": "宮城離岸110kmB", + "92212": "宮城離岸120kmA", + "92220": "宮城離岸130kmA", + "92221": "宮城離岸140kmA", + "92230": "宮城離岸150kmA", + "92231": "宮城離岸160kmA", + "92232": "宮城離岸160kmB", + "92240": "宮城離岸180kmA", + "92241": "宮城離岸180kmB", + "92242": "宮城離岸190kmA", + "92250": "宮城離岸230kmA", + "92251": "宮城離岸240kmA", + "92270": "宮城離岸350kmA", + "92500": "ç¦å³¶é›¢å²¸100kmA", + "92510": "ç¦å³¶é›¢å²¸120kmA", + "92520": "ç¦å³¶é›¢å²¸130kmA", + "92521": "ç¦å³¶é›¢å²¸140kmA", + "92530": "ç¦å³¶é›¢å²¸160kmA", + "92531": "ç¦å³¶é›¢å²¸170kmA", + "92540": "ç¦å³¶é›¢å²¸180kmA", + "92550": "ç¦å³¶é›¢å²¸240kmA", + "92551": "ç¦å³¶é›¢å²¸250kmA", + "93010": "茨城離岸110kmA", + "93011": "茨城離岸120kmA", + "93020": "茨城離岸140kmA", + "93021": "茨城離岸140kmB", + "93030": "茨城離岸160kmA", + "93031": "茨城離岸160kmB", + "93050": "茨城離岸220kmA", + "93051": "茨城離岸240kmA", + "93100": "åƒè‘‰æ±æ–¹é›¢å²¸100kmA", + "93110": "åƒè‘‰æ±æ–¹é›¢å²¸110kmA", + "93111": "åƒè‘‰æ±å—離岸110kmA", + "93112": "åƒè‘‰æ±å—離岸120kmA", + "93113": "åƒè‘‰æ±å—離岸120kmB", + "93114": "åƒè‘‰æ±å—離岸120kmC", + "93120": "åƒè‘‰æ±å—離岸140kmA", + "93121": "åƒè‘‰æ±å—離岸140kmB", + "93130": "åƒè‘‰æ±å—離岸160kmA", + "93131": "åƒè‘‰æ±æ–¹é›¢å²¸170kmA", + "93140": "åƒè‘‰æ±å—離岸180kmA", + "93141": "åƒè‘‰æ±æ–¹é›¢å²¸180kmA", + "93142": "åƒè‘‰æ±æ–¹é›¢å²¸190kmA", + "93143": "åƒè‘‰æ±æ–¹é›¢å²¸200kmA", + "95300": "和歌山離岸100kmA", + "95301": "和歌山離岸100kmB", + "95302": "和歌山離岸100kmC", + "95303": "和歌山離岸100kmD", + "95310": "和歌山離岸110kmA", + "96110": "高知離岸110kmA", + "96111": "高知離岸120kmA", + "96112": "高知離岸120kmB", + "96113": "高知離岸120kmC", + "96120": "高知離岸130kmA", + "96121": "高知離岸140kmA", + "97600": "宮崎離岸100kmA", + "97620": "宮崎離岸130kmA" + } +} \ No newline at end of file diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/PointTsunami/yue.json.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/PointTsunami/yue.json.meta new file mode 100644 index 0000000..6bc90fe --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/PointTsunami/yue.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: bfde517dbfcfff64bbfc87613b6cc1eb +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/PointTsunami/zh-Hant.json b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/PointTsunami/zh-Hant.json new file mode 100644 index 0000000..a736478 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/PointTsunami/zh-Hant.json @@ -0,0 +1,476 @@ +{ + "Culture": "zh-TW", + "Strings": { + "10001": "釧路", + "10002": "根室市花咲", + "10020": "根室港", + "10021": "濱中町霧多布港", + "10031": "ç¾…è‡¼æ¼æ¸¯", + "10034": "åŽšå²¸æ¼æ¸¯", + "10050": "釧路離岸100kmA", + "10060": "釧路離岸80kmA", + "10061": "釧路離岸80kmB", + "10062": "根室æ±å—離岸80kmA", + "10070": "釧路離岸60kmA", + "10071": "根室æ±å—離岸50kmA", + "10072": "釧路離岸50kmA", + "10073": "根室æ±å—離岸60kmA", + "10100": "浦河", + "10101": "浦河", + "10102": "å勿¸¯", + "10103": "襟裳町庶野", + "10150": "åå‹é›¢å²¸100kmA", + "10151": "浦河離岸100kmA", + "10152": "浦河離岸100kmB", + "10153": "åå‹é›¢å²¸90kmA", + "10160": "åå‹é›¢å²¸80kmA", + "10161": "åå‹é›¢å²¸80kmB", + "10162": "åå‹é›¢å²¸80kmC", + "10163": "浦河離岸70kmA", + "10170": "åå‹é›¢å²¸60kmA", + "10171": "浦河離岸60kmA", + "10172": "浦河離岸50kmA", + "10201": "室蘭", + "10202": "函館", + "10203": "è‹«å°ç‰§è¥¿æ¸¯", + "10204": "ç¦å³¶ç”ºå‰å²¡", + "10221": "è‹«å°ç‰§æ±æ¸¯", + "10222": "ç™½è€æ¸¯", + "10223": "渡島森港", + "10224": "室蘭港", + "10239": "å±±èƒŒæ³Šæ¼æ¸¯", + "11001": "稚内", + "11002": "ç•™èŒ", + "11003": "å°æ¨½", + "11022": "石狩湾新港", + "11023": "利尻島沓形港", + "11024": "羽幌港", + "11030": "å°æ¨½å¸‚å¿è·¯", + "11101": "壽都", + "11102": "江差", + "11121": "瀨棚港", + "11122": "岩内港", + "11123": "奥尻島奥尻港", + "11130": "å¥¥å°»å³¶æ¾æ±Ÿ", + "12001": "網走", + "12002": "紋別", + "12003": "æžå¹¸æ¸¯", + "12020": "紋別港", + "20001": "深浦", + "20002": "é¾é£›", + "20090": "é’æ£®æ·±æµ¦å¤–æµ·", + "20101": "八戶", + "20102": "陸奧市関根濱", + "20120": "陸奧å°å·åŽŸæ¸¯", + "20121": "八戶港", + "20150": "é’æ£®æ±æ–¹é›¢å²¸100kmA", + "20151": "é’æ£®æ±æ–¹é›¢å²¸90kmA", + "20160": "é’æ£®æ±æ–¹é›¢å²¸80kmA", + "20170": "é’æ£®æ±æ–¹é›¢å²¸60kmA", + "20171": "é’æ£®æ±æ–¹é›¢å²¸60kmB", + "20172": "é’æ£®æ±æ–¹é›¢å²¸50kmA", + "20173": "é’æ£®æ±æ–¹é›¢å²¸50kmB", + "20180": "é’æ£®æ±æ–¹é›¢å²¸40kmA", + "20181": "é’æ£®æ±æ–¹é›¢å²¸30kmA", + "20190": "é’æ£®å…«æˆ¶å¤–æµ·", + "20201": "é’æ£®", + "20202": "陸奧市大湊", + "21001": "å®®å¤", + "21002": "大船渡", + "21003": "釜石", + "21020": "久慈港", + "21050": "岩手離岸90kmA", + "21051": "岩手離岸90kmB", + "21060": "岩手離岸70kmA", + "21061": "岩手離岸80kmA", + "21070": "岩手離岸60kmA", + "21071": "岩手離岸60kmB", + "21072": "岩手離岸60kmC", + "21080": "岩手離岸40kmA", + "21081": "岩手離岸40kmB", + "21082": "岩手離岸40kmC", + "21083": "岩手離岸30kmA", + "21084": "岩手離岸30kmB", + "21090": "岩手釜石外海", + "21091": "岩手宮å¤å¤–æµ·", + "21092": "岩手久慈外海", + "22001": "牡鹿町鮎å·", + "22002": "石å·å¸‚鮎å·", + "22021": "仙尿¸¯", + "22022": "çŸ³å·æ¸¯", + "22050": "宮城離岸90kmA", + "22060": "宮城離岸80kmA", + "22061": "宮城離岸80kmB", + "22070": "宮城離岸60kmA", + "22071": "宮城離岸50kmA", + "22072": "宮城離岸50kmB", + "22080": "宮城離岸40kmA", + "22081": "宮城離岸30kmA", + "22090": "宮城金è¯å±±å¤–æµ·", + "22091": "氣仙沼廣田湾外海", + "22095": "宮城牡鹿外海", + "23001": "ç§‹ç”°", + "23090": "秋田男鹿外海", + "24001": "é…’ç”°", + "24030": "飛島", + "24031": "鶴岡市鼠関", + "24090": "山形酒田外海", + "25002": "ç£åŸŽå¸‚å°å濱", + "25030": "相馬", + "25050": "ç¦å³¶é›¢å²¸90kmA", + "25060": "ç¦å³¶é›¢å²¸70kmA", + "25061": "ç¦å³¶é›¢å²¸70kmB", + "25070": "ç¦å³¶é›¢å²¸50kmA", + "25071": "ç¦å³¶é›¢å²¸50kmB", + "25080": "ç¦å³¶é›¢å²¸30kmA", + "25081": "ç¦å³¶é›¢å²¸30kmB", + "25090": "ç¦å³¶å°å濱外海", + "30001": "大洗", + "30020": "神栖市鹿島港", + "30050": "茨城離岸90kmA", + "30051": "茨城離岸90kmB", + "30060": "茨城離岸70kmA", + "30070": "茨城離岸60kmA", + "30071": "茨城離岸50kmA", + "30072": "茨城離岸50kmB", + "30080": "茨城離岸40kmA", + "30095": "茨城神栖外海", + "31001": "銚å­", + "31002": "勿µ¦å¸‚興津", + "31050": "åƒè‘‰æ±æ–¹é›¢å²¸90kmA", + "31051": "åƒè‘‰æ±å—離岸90kmA", + "31060": "åƒè‘‰æ±æ–¹é›¢å²¸80kmA", + "31061": "åƒè‘‰æ±å—離岸80kmA", + "31062": "åƒè‘‰æ±æ–¹é›¢å²¸70kmA", + "31063": "åƒè‘‰æ±æ–¹é›¢å²¸70kmB", + "31064": "åƒè‘‰æ±å—離岸80kmB", + "31070": "åƒè‘‰æ±å—離岸60kmA", + "31071": "åƒè‘‰æ±æ–¹é›¢å²¸60kmA", + "31072": "åƒè‘‰æ±æ–¹é›¢å²¸60kmB", + "31073": "åƒè‘‰æ±å—離岸60kmB", + "31074": "åƒè‘‰æ±æ–¹é›¢å²¸50kmA", + "31075": "åƒè‘‰æ±æ–¹é›¢å²¸50kmB", + "31080": "åƒè‘‰æ±å—離岸40kmA", + "31081": "åƒè‘‰æ±å—離岸30kmA", + "31082": "åƒè‘‰æ±æ–¹é›¢å²¸40kmA", + "31083": "åƒè‘‰æ±å—離岸30kmB", + "31084": "åƒè‘‰æ±å—離岸30kmC", + "31101": "館山市布良", + "31201": "åƒè‘‰", + "31202": "æ±äº¬æ™´æµ·", + "31203": "横濱", + "31204": "横須賀", + "31205": "åƒè‘‰", + "31206": "横濱", + "32001": "伊豆大島岡田", + "32002": "三宅島åªç”°", + "32003": "å…«ä¸ˆå³¶å…«é‡æ ¹", + "32004": "神津島神津島港", + "32005": "三宅島阿å¤", + "32006": "八丈島神湊", + "32101": "父島二見", + "32102": "å—鳥島", + "33000": "å°ç”°åŽŸ", + "33001": "ä¸‰æµ¦å¸‚ä¸‰å´Žæ¼æ¸¯", + "33030": "三浦市油壺", + "33080": "神奈å·é›¢å²¸40km", + "33095": "神奈å·ç›¸æ¨¡æ¹¾å¤–æµ·", + "34001": "新潟", + "34003": "粟島", + "34004": "上越市直江津", + "34030": "æŸå´Žå¸‚鯨波", + "34101": "兩津市鷲崎", + "34102": "使¸¡å¸‚鷲崎", + "34103": "使¸¡å¸‚鷲崎", + "34104": "使¸¡å¸‚å°æœ¨", + "34139": "å°æœ¨", + "35001": "富山", + "35021": "伿œ¨å¯Œå±±æ¸¯æ–°æ¹Š", + "36001": "ç æ´²å¸‚é•·æ©‹", + "36002": "ç æ´²å¸‚飯田", + "36020": "輪島港", + "36021": "七尾港", + "36101": "金澤", + "37003": "å‚井市三國", + "37020": "敦賀港", + "38001": "沼津市内浦", + "38002": "清水", + "38004": "å—伊豆町石廊崎", + "38005": "御å‰å´Ž", + "38006": "舞阪", + "38007": "å—伊豆町手石港", + "38020": "下田港", + "38030": "伊æ±", + "38031": "西伊豆町田å­", + "38032": "燒津", + "38034": "å—伊豆", + "38070": "é™å²¡é›¢å²¸50km", + "38090": "é™å²¡å¾¡å‰å´Žå¤–æµ·", + "39001": "田原市赤羽根", + "39090": "伊勢湾å£å¤–æµ·", + "39101": "åå¤å±‹", + "39102": "åŠç”°å¸‚衣浦", + "39103": "四日市", + "39120": "è±æ©‹å¸‚三河港", + "40001": "鳥羽", + "40002": "尾鷲", + "40003": "ç†Šé‡Žå¸‚éŠæœ¨", + "40050": "䏉釿±å—離岸90kmA", + "40060": "䏉釿±å—離岸80kmA", + "40061": "䏉釿±å—離岸80kmB", + "40062": "䏉釿±å—離岸80kmC", + "40063": "䏉釿±å—離岸70kmA", + "40070": "䏉釿±å—離岸60kmA", + "40071": "䏉釿±å—離岸60kmB", + "40072": "䏉釿±å—離岸50kmA", + "40080": "䏉釿±å—離岸40kmA", + "40081": "䏉釿±å—離岸40kmB", + "40082": "䏉釿±å—離岸30kmA", + "40090": "三é‡å°¾é·²å¤–æµ·", + "50001": "舞鶴", + "51001": "大阪天ä¿å±±", + "51002": "岬町淡輪", + "52001": "è±å²¡å¸‚津居山", + "52101": "神戶", + "52102": "姬路", + "52201": "洲本", + "52202": "洲本", + "53001": "é‚£æ™ºå‹æµ¦ç”ºæµ¦ç¥ž", + "53002": "串本町袋港", + "53003": "白濱町細野", + "53004": "和歌山", + "53005": "御åŠ", + "53006": "御åŠå¸‚祓井戶", + "53007": "白濱町堅田", + "53060": "和歌山離岸80kmA", + "53061": "和歌山離岸80kmB", + "53062": "和歌山離岸70kmA", + "53063": "和歌山離岸70kmB", + "53064": "和歌山離岸80kmC", + "53065": "和歌山離岸80kmD", + "53066": "和歌山離岸80kmE", + "53067": "和歌山離岸70kmC", + "53068": "和歌山離岸70kmD", + "53069": "和歌山離岸70kmE", + "53070": "和歌山離岸50kmA", + "53071": "和歌山離岸50kmB", + "53072": "和歌山離岸60kmA", + "53073": "和歌山離岸60kmB", + "53074": "和歌山離岸60kmC", + "53075": "和歌山離岸50kmC", + "53076": "和歌山離岸50kmD", + "53077": "和歌山離岸50kmE", + "53078": "和歌山離岸50kmF", + "53079": "和歌山離岸40kmA", + "53080": "和歌山離岸30kmA", + "53081": "和歌山離岸30kmB", + "53082": "和歌山離岸40kmB", + "53083": "和歌山離岸40kmC", + "53084": "和歌山離岸40kmD", + "53085": "和歌山離岸40kmE", + "53086": "和歌山離岸40kmF", + "53087": "和歌山離岸40kmG", + "53088": "和歌山離岸30kmC", + "53089": "和歌山離岸30kmD", + "53090": "和歌山白濱外海", + "54001": "境港市境", + "54030": "岩美町田後", + "55001": "濱田", + "55101": "éš±å²è¥¿é„‰", + "56001": "玉野市宇野", + "57001": "廣島", + "57002": "å³", + "58001": "å°æ¾å³¶", + "58002": "å¾·å³¶ç”±å²", + "58070": "德島離岸50kmA", + "58071": "德島離岸50kmB", + "58080": "德島離岸40kmA", + "58081": "德島離岸40kmB", + "58090": "德島海陽外海", + "59001": "高æ¾", + "59020": "å‚出市与島港", + "59022": "多度津港", + "60001": "宇和島", + "60101": "æ¾å±±", + "60120": "今治市å°å³¶", + "60121": "今治市馬島", + "61001": "室戶市室戶岬", + "61002": "高知", + "61003": "åœŸä½æ¸…æ°´", + "61020": "須崎港", + "61030": "中土ä½ç”ºä¹…礼港", + "61050": "高知離岸100kmA", + "61051": "高知離岸90kmA", + "61052": "高知離岸90kmB", + "61060": "高知離岸70kmA", + "61061": "高知離岸80kmA", + "61062": "高知離岸70kmB", + "61063": "高知離岸70kmC", + "61064": "高知離岸80kmB", + "61070": "高知離岸60kmA", + "61071": "高知離岸60kmB", + "61072": "高知離岸60kmC", + "61090": "高知足摺岬外海", + "61091": "高知室戶岬外海", + "70021": "下関市å—風泊港", + "70101": "下関市彦島弟å­å¾…", + "70102": "å¾·å±±", + "70120": "宇部港", + "70121": "三田尻中関港", + "70122": "下関港長府", + "71001": "北ä¹å·žå¸‚é–€å¸", + "71002": "北ä¹å·žå¸‚é–€å¸", + "71021": "苅田港", + "71022": "北ä¹å·žæ¸¯é’濱", + "71101": "ç¦å²¡å¸‚åšå¤š", + "71120": "北ä¹å·žæ¸¯æ—¥æ˜Ž", + "71201": "大牟田市三池", + "71202": "太良町大浦野崎", + "71203": "三角", + "71220": "八代港", + "71221": "天è‰å¸‚本渡港", + "71222": "熊本港", + "72020": "唿´¥æ¸¯", + "72030": "玄海町å‡å±‹", + "73001": "é•·å´Ž", + "73002": "å£ä¹‹æ´¥", + "73003": "ç¦æ±Ÿå³¶ç¦æ±Ÿæ¸¯", + "73004": "ä½ä¸–ä¿", + "73020": "長崎港皇åŽ", + "73021": "平戶市田平港", + "73101": "å°é¦¬ç¾Žæ´¥å³¶", + "73102": "å°é¦¬æ¯”ç”°å‹", + "73110": "å°é¦¬å¸‚嚴原", + "73120": "壹å²å³¶é„‰ä¹‹æµ¦æ¸¯", + "74000": "苓北町都呂呂", + "75001": "大分", + "75020": "別府港", + "75100": "ä½ä¼¯å¸‚æ¾æµ¦", + "76001": "æ—¥å‘市細島", + "76002": "æ—¥å—市油津", + "76020": "宮崎港", + "76050": "宮崎離岸90kmA", + "76051": "宮崎離岸90kmB", + "76070": "宮崎離岸60kmA", + "76071": "宮崎離岸60kmB", + "76080": "宮崎離岸40kmA", + "76090": "宮崎日å‘外海", + "77001": "ä½å¤šç”ºå¤§æ³Š", + "77002": "å—大隅町大泊", + "77020": "志布志港", + "77101": "種å­å³¶ç”°ä¹‹è„‡", + "77102": "種å­å³¶è¥¿ä¹‹è¡¨", + "77103": "種å­å³¶ç†Šé‡Ž", + "77201": "åç€¨å¸‚å°æ¹Š", + "77202": "å瀨市å瀨", + "77203": "中之島", + "77204": "å¥„ç¾Žå¸‚å°æ¹Š", + "77205": "奄美市å瀨", + "77301": "鹿兒島", + "77302": "枕崎", + "77303": "鹿兒島", + "77330": "阿久根", + "80001": "那霸", + "80002": "久米島", + "80003": "沖繩市中城湾港", + "80030": "å—城市安座真", + "80102": "å—å¤§æ±æ¼æ¸¯", + "80201": "å®®å¤å³¶å¹³è‰¯", + "80202": "石垣島石垣港", + "80203": "西表島", + "80204": "与那国島久部良", + "80205": "石垣島石垣港", + "80206": "å®®å¤å³¶å¹³è‰¯", + "91010": "釧路離岸110kmA", + "91011": "åå‹é›¢å²¸110kmA", + "91012": "åå‹é›¢å²¸120kmA", + "91020": "釧路離岸130kmA", + "91021": "釧路離岸130kmB", + "91030": "釧路離岸150kmA", + "91031": "åå‹é›¢å²¸150kmA", + "91032": "釧路離岸160kmA", + "91033": "釧路離岸170kmA", + "91040": "釧路離岸180kmA", + "92010": "é’æ£®æ±æ–¹é›¢å²¸120kmA", + "92030": "é’æ£®æ±æ–¹é›¢å²¸160kmA", + "92040": "é’æ£®æ±æ–¹é›¢å²¸180kmA", + "92041": "é’æ£®æ±æ–¹é›¢å²¸200kmA", + "92042": "é’æ£®æ±æ–¹é›¢å²¸200kmB", + "92060": "é’æ£®æ±æ–¹é›¢å²¸260kmA", + "92070": "é’æ£®æ±æ–¹é›¢å²¸310kmA", + "92110": "岩手離岸110kmA", + "92111": "岩手離岸120kmA", + "92112": "岩手離岸120kmB", + "92120": "岩手離岸140kmA", + "92121": "岩手離岸140kmB", + "92122": "岩手離岸140kmC", + "92130": "岩手離岸150kmA", + "92131": "岩手離岸160kmA", + "92132": "岩手離岸170kmA", + "92133": "岩手離岸170kmB", + "92134": "岩手離岸170kmC", + "92150": "岩手離岸220kmA", + "92151": "岩手離岸230kmA", + "92152": "岩手離岸240kmA", + "92170": "岩手離岸380kmA", + "92171": "岩手離岸320kmA", + "92210": "宮城離岸110kmA", + "92211": "宮城離岸110kmB", + "92212": "宮城離岸120kmA", + "92220": "宮城離岸130kmA", + "92221": "宮城離岸140kmA", + "92230": "宮城離岸150kmA", + "92231": "宮城離岸160kmA", + "92232": "宮城離岸160kmB", + "92240": "宮城離岸180kmA", + "92241": "宮城離岸180kmB", + "92242": "宮城離岸190kmA", + "92250": "宮城離岸230kmA", + "92251": "宮城離岸240kmA", + "92270": "宮城離岸350kmA", + "92500": "ç¦å³¶é›¢å²¸100kmA", + "92510": "ç¦å³¶é›¢å²¸120kmA", + "92520": "ç¦å³¶é›¢å²¸130kmA", + "92521": "ç¦å³¶é›¢å²¸140kmA", + "92530": "ç¦å³¶é›¢å²¸160kmA", + "92531": "ç¦å³¶é›¢å²¸170kmA", + "92540": "ç¦å³¶é›¢å²¸180kmA", + "92550": "ç¦å³¶é›¢å²¸240kmA", + "92551": "ç¦å³¶é›¢å²¸250kmA", + "93010": "茨城離岸110kmA", + "93011": "茨城離岸120kmA", + "93020": "茨城離岸140kmA", + "93021": "茨城離岸140kmB", + "93030": "茨城離岸160kmA", + "93031": "茨城離岸160kmB", + "93050": "茨城離岸220kmA", + "93051": "茨城離岸240kmA", + "93100": "åƒè‘‰æ±æ–¹é›¢å²¸100kmA", + "93110": "åƒè‘‰æ±æ–¹é›¢å²¸110kmA", + "93111": "åƒè‘‰æ±å—離岸110kmA", + "93112": "åƒè‘‰æ±å—離岸120kmA", + "93113": "åƒè‘‰æ±å—離岸120kmB", + "93114": "åƒè‘‰æ±å—離岸120kmC", + "93120": "åƒè‘‰æ±å—離岸140kmA", + "93121": "åƒè‘‰æ±å—離岸140kmB", + "93130": "åƒè‘‰æ±å—離岸160kmA", + "93131": "åƒè‘‰æ±æ–¹é›¢å²¸170kmA", + "93140": "åƒè‘‰æ±å—離岸180kmA", + "93141": "åƒè‘‰æ±æ–¹é›¢å²¸180kmA", + "93142": "åƒè‘‰æ±æ–¹é›¢å²¸190kmA", + "93143": "åƒè‘‰æ±æ–¹é›¢å²¸200kmA", + "95300": "和歌山離岸100kmA", + "95301": "和歌山離岸100kmB", + "95302": "和歌山離岸100kmC", + "95303": "和歌山離岸100kmD", + "95310": "和歌山離岸110kmA", + "96110": "高知離岸110kmA", + "96111": "高知離岸120kmA", + "96112": "高知離岸120kmB", + "96113": "高知離岸120kmC", + "96120": "高知離岸130kmA", + "96121": "高知離岸140kmA", + "97600": "宮崎離岸100kmA", + "97620": "宮崎離岸130kmA" + } +} \ No newline at end of file diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/PointTsunami/zh-Hant.json.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/PointTsunami/zh-Hant.json.meta new file mode 100644 index 0000000..4447723 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/PointTsunami/zh-Hant.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: dc8c99a885ef6c64688e29acae06998c +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/PointTsunami/zh.json b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/PointTsunami/zh.json new file mode 100644 index 0000000..ff221db --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/PointTsunami/zh.json @@ -0,0 +1,476 @@ +{ + "Culture": "zh-CN", + "Strings": { + "10001": "é’è·¯", + "10002": "根室市花咲", + "10020": "根室港", + "10021": "滨中町雾多布港", + "10031": "罗臼渔港", + "10034": "厚岸渔港", + "10050": "é’路离岸100kmA", + "10060": "é’路离岸80kmA", + "10061": "é’路离岸80kmB", + "10062": "根室东å—离岸80kmA", + "10070": "é’路离岸60kmA", + "10071": "根室东å—离岸50kmA", + "10072": "é’路离岸50kmA", + "10073": "根室东å—离岸60kmA", + "10100": "浦河", + "10101": "浦河", + "10102": "å胜港", + "10103": "襟裳町庶野", + "10150": "å胜离岸100kmA", + "10151": "浦河离岸100kmA", + "10152": "浦河离岸100kmB", + "10153": "å胜离岸90kmA", + "10160": "å胜离岸80kmA", + "10161": "å胜离岸80kmB", + "10162": "å胜离岸80kmC", + "10163": "浦河离岸70kmA", + "10170": "å胜离岸60kmA", + "10171": "浦河离岸60kmA", + "10172": "浦河离岸50kmA", + "10201": "室兰", + "10202": "函馆", + "10203": "è‹«å°ç‰§è¥¿æ¸¯", + "10204": "ç¦å²›ç”ºå‰å†ˆ", + "10221": "è‹«å°ç‰§ä¸œæ¸¯", + "10222": "ç™½è€æ¸¯", + "10223": "渡岛森港", + "10224": "室兰港", + "10239": "山背泊渔港", + "11001": "稚内", + "11002": "ç•™èŒ", + "11003": "å°æ¨½", + "11022": "石狩湾新港", + "11023": "利尻岛沓形港", + "11024": "羽幌港", + "11030": "å°æ¨½å¸‚å¿è·¯", + "11101": "寿都", + "11102": "江差", + "11121": "濑棚港", + "11122": "岩内港", + "11123": "奥尻岛奥尻港", + "11130": "å¥¥å°»å²›æ¾æ±Ÿ", + "12001": "网走", + "12002": "纹别", + "12003": "æžå¹¸æ¸¯", + "12020": "纹别港", + "20001": "深浦", + "20002": "龙飞", + "20090": "é’æ£®æ·±æµ¦å¤–æµ·", + "20101": "八户", + "20102": "陆奥市关根滨", + "20120": "陆奥å°å·åŽŸæ¸¯", + "20121": "八户港", + "20150": "é’æ£®ä¸œæ–¹ç¦»å²¸100kmA", + "20151": "é’æ£®ä¸œæ–¹ç¦»å²¸90kmA", + "20160": "é’æ£®ä¸œæ–¹ç¦»å²¸80kmA", + "20170": "é’æ£®ä¸œæ–¹ç¦»å²¸60kmA", + "20171": "é’æ£®ä¸œæ–¹ç¦»å²¸60kmB", + "20172": "é’æ£®ä¸œæ–¹ç¦»å²¸50kmA", + "20173": "é’æ£®ä¸œæ–¹ç¦»å²¸50kmB", + "20180": "é’æ£®ä¸œæ–¹ç¦»å²¸40kmA", + "20181": "é’æ£®ä¸œæ–¹ç¦»å²¸30kmA", + "20190": "é’æ£®å…«æˆ·å¤–æµ·", + "20201": "é’æ£®", + "20202": "陆奥市大凑", + "21001": "宫å¤", + "21002": "大船渡", + "21003": "釜石", + "21020": "久慈港", + "21050": "岩手离岸90kmA", + "21051": "岩手离岸90kmB", + "21060": "岩手离岸70kmA", + "21061": "岩手离岸80kmA", + "21070": "岩手离岸60kmA", + "21071": "岩手离岸60kmB", + "21072": "岩手离岸60kmC", + "21080": "岩手离岸40kmA", + "21081": "岩手离岸40kmB", + "21082": "岩手离岸40kmC", + "21083": "岩手离岸30kmA", + "21084": "岩手离岸30kmB", + "21090": "岩手釜石外海", + "21091": "岩手宫å¤å¤–æµ·", + "21092": "岩手久慈外海", + "22001": "牡鹿町鲇å·", + "22002": "石å·å¸‚鲇å·", + "22021": "仙尿¸¯", + "22022": "çŸ³å·æ¸¯", + "22050": "宫城离岸90kmA", + "22060": "宫城离岸80kmA", + "22061": "宫城离岸80kmB", + "22070": "宫城离岸60kmA", + "22071": "宫城离岸50kmA", + "22072": "宫城离岸50kmB", + "22080": "宫城离岸40kmA", + "22081": "宫城离岸30kmA", + "22090": "宫城金åŽå±±å¤–æµ·", + "22091": "气仙沼广田湾外海", + "22095": "宫城牡鹿外海", + "23001": "ç§‹ç”°", + "23090": "秋田男鹿外海", + "24001": "é…’ç”°", + "24030": "飞岛", + "24031": "鹤冈市鼠关", + "24090": "山形酒田外海", + "25002": "ç£åŸŽå¸‚å°å滨", + "25030": "相马", + "25050": "ç¦å²›ç¦»å²¸90kmA", + "25060": "ç¦å²›ç¦»å²¸70kmA", + "25061": "ç¦å²›ç¦»å²¸70kmB", + "25070": "ç¦å²›ç¦»å²¸50kmA", + "25071": "ç¦å²›ç¦»å²¸50kmB", + "25080": "ç¦å²›ç¦»å²¸30kmA", + "25081": "ç¦å²›ç¦»å²¸30kmB", + "25090": "ç¦å²›å°å滨外海", + "30001": "大洗", + "30020": "神栖市鹿岛港", + "30050": "茨城离岸90kmA", + "30051": "茨城离岸90kmB", + "30060": "茨城离岸70kmA", + "30070": "茨城离岸60kmA", + "30071": "茨城离岸50kmA", + "30072": "茨城离岸50kmB", + "30080": "茨城离岸40kmA", + "30095": "茨城神栖外海", + "31001": "é“«å­", + "31002": "胜浦市兴津", + "31050": "åƒå¶ä¸œæ–¹ç¦»å²¸90kmA", + "31051": "åƒå¶ä¸œå—离岸90kmA", + "31060": "åƒå¶ä¸œæ–¹ç¦»å²¸80kmA", + "31061": "åƒå¶ä¸œå—离岸80kmA", + "31062": "åƒå¶ä¸œæ–¹ç¦»å²¸70kmA", + "31063": "åƒå¶ä¸œæ–¹ç¦»å²¸70kmB", + "31064": "åƒå¶ä¸œå—离岸80kmB", + "31070": "åƒå¶ä¸œå—离岸60kmA", + "31071": "åƒå¶ä¸œæ–¹ç¦»å²¸60kmA", + "31072": "åƒå¶ä¸œæ–¹ç¦»å²¸60kmB", + "31073": "åƒå¶ä¸œå—离岸60kmB", + "31074": "åƒå¶ä¸œæ–¹ç¦»å²¸50kmA", + "31075": "åƒå¶ä¸œæ–¹ç¦»å²¸50kmB", + "31080": "åƒå¶ä¸œå—离岸40kmA", + "31081": "åƒå¶ä¸œå—离岸30kmA", + "31082": "åƒå¶ä¸œæ–¹ç¦»å²¸40kmA", + "31083": "åƒå¶ä¸œå—离岸30kmB", + "31084": "åƒå¶ä¸œå—离岸30kmC", + "31101": "馆山市布良", + "31201": "åƒå¶", + "31202": "东京晴海", + "31203": "横滨", + "31204": "横须贺", + "31205": "åƒå¶", + "31206": "横滨", + "32001": "伊豆大岛冈田", + "32002": "三宅岛åªç”°", + "32003": "å…«ä¸ˆå²›å…«é‡æ ¹", + "32004": "神津岛神津岛港", + "32005": "三宅岛阿å¤", + "32006": "八丈岛神凑", + "32101": "父岛二è§", + "32102": "å—鸟岛", + "33000": "å°ç”°åŽŸ", + "33001": "三浦市三崎渔港", + "33030": "三浦市油壶", + "33080": "神奈å·ç¦»å²¸40km", + "33095": "神奈å·ç›¸æ¨¡æ¹¾å¤–æµ·", + "34001": "新潟", + "34003": "粟岛", + "34004": "上越市直江津", + "34030": "æŸå´Žå¸‚鲸波", + "34101": "两津市鹫崎", + "34102": "使¸¡å¸‚鹫崎", + "34103": "使¸¡å¸‚鹫崎", + "34104": "使¸¡å¸‚å°æœ¨", + "34139": "å°æœ¨", + "35001": "富山", + "35021": "伿œ¨å¯Œå±±æ¸¯æ–°å‡‘", + "36001": "ç æ´²å¸‚é•¿æ¡¥", + "36002": "ç æ´²å¸‚饭田", + "36020": "轮岛港", + "36021": "七尾港", + "36101": "金泽", + "37003": "å‚井市三国", + "37020": "敦贺港", + "38001": "沼津市内浦", + "38002": "清水", + "38004": "å—伊豆町石廊崎", + "38005": "御å‰å´Ž", + "38006": "舞阪", + "38007": "å—伊豆町手石港", + "38020": "下田港", + "38030": "伊东", + "38031": "西伊豆町田å­", + "38032": "烧津", + "38034": "å—伊豆", + "38070": "é™å†ˆç¦»å²¸50km", + "38090": "é™å†ˆå¾¡å‰å´Žå¤–æµ·", + "39001": "田原市赤羽根", + "39090": "伊势湾å£å¤–æµ·", + "39101": "åå¤å±‹", + "39102": "åŠç”°å¸‚衣浦", + "39103": "四日市", + "39120": "丰桥市三河港", + "40001": "鸟羽", + "40002": "尾鹫", + "40003": "熊野市游木", + "40050": "三é‡ä¸œå—离岸90kmA", + "40060": "三é‡ä¸œå—离岸80kmA", + "40061": "三é‡ä¸œå—离岸80kmB", + "40062": "三é‡ä¸œå—离岸80kmC", + "40063": "三é‡ä¸œå—离岸70kmA", + "40070": "三é‡ä¸œå—离岸60kmA", + "40071": "三é‡ä¸œå—离岸60kmB", + "40072": "三é‡ä¸œå—离岸50kmA", + "40080": "三é‡ä¸œå—离岸40kmA", + "40081": "三é‡ä¸œå—离岸40kmB", + "40082": "三é‡ä¸œå—离岸30kmA", + "40090": "三é‡å°¾é¹«å¤–æµ·", + "50001": "舞鹤", + "51001": "大阪天ä¿å±±", + "51002": "岬町淡轮", + "52001": "丰冈市津居山", + "52101": "神户", + "52102": "姬路", + "52201": "洲本", + "52202": "洲本", + "53001": "那智胜浦町浦神", + "53002": "串本町袋港", + "53003": "白滨町细野", + "53004": "和歌山", + "53005": "御åŠ", + "53006": "御åŠå¸‚祓井户", + "53007": "白滨町åšç”°", + "53060": "和歌山离岸80kmA", + "53061": "和歌山离岸80kmB", + "53062": "和歌山离岸70kmA", + "53063": "和歌山离岸70kmB", + "53064": "和歌山离岸80kmC", + "53065": "和歌山离岸80kmD", + "53066": "和歌山离岸80kmE", + "53067": "和歌山离岸70kmC", + "53068": "和歌山离岸70kmD", + "53069": "和歌山离岸70kmE", + "53070": "和歌山离岸50kmA", + "53071": "和歌山离岸50kmB", + "53072": "和歌山离岸60kmA", + "53073": "和歌山离岸60kmB", + "53074": "和歌山离岸60kmC", + "53075": "和歌山离岸50kmC", + "53076": "和歌山离岸50kmD", + "53077": "和歌山离岸50kmE", + "53078": "和歌山离岸50kmF", + "53079": "和歌山离岸40kmA", + "53080": "和歌山离岸30kmA", + "53081": "和歌山离岸30kmB", + "53082": "和歌山离岸40kmB", + "53083": "和歌山离岸40kmC", + "53084": "和歌山离岸40kmD", + "53085": "和歌山离岸40kmE", + "53086": "和歌山离岸40kmF", + "53087": "和歌山离岸40kmG", + "53088": "和歌山离岸30kmC", + "53089": "和歌山离岸30kmD", + "53090": "和歌山白滨外海", + "54001": "境港市境", + "54030": "岩美町田åŽ", + "55001": "滨田", + "55101": "éšå²è¥¿ä¹¡", + "56001": "玉野市宇野", + "57001": "广岛", + "57002": "å´", + "58001": "å°æ¾å²›", + "58002": "德岛由å²", + "58070": "德岛离岸50kmA", + "58071": "德岛离岸50kmB", + "58080": "德岛离岸40kmA", + "58081": "德岛离岸40kmB", + "58090": "德岛海阳外海", + "59001": "高æ¾", + "59020": "å‚出市与岛港", + "59022": "多度津港", + "60001": "宇和岛", + "60101": "æ¾å±±", + "60120": "今治市å°å²›", + "60121": "今治市马岛", + "61001": "室户市室户岬", + "61002": "高知", + "61003": "åœŸä½æ¸…æ°´", + "61020": "须崎港", + "61030": "中土ä½ç”ºä¹…礼港", + "61050": "高知离岸100kmA", + "61051": "高知离岸90kmA", + "61052": "高知离岸90kmB", + "61060": "高知离岸70kmA", + "61061": "高知离岸80kmA", + "61062": "高知离岸70kmB", + "61063": "高知离岸70kmC", + "61064": "高知离岸80kmB", + "61070": "高知离岸60kmA", + "61071": "高知离岸60kmB", + "61072": "高知离岸60kmC", + "61090": "高知足折岬外海", + "61091": "高知室户岬外海", + "70021": "下关市å—风泊港", + "70101": "下关市彦岛弟å­å¾…", + "70102": "å¾·å±±", + "70120": "宇部港", + "70121": "三田尻中关港", + "70122": "下关港长府", + "71001": "北ä¹å·žå¸‚é—¨å¸", + "71002": "北ä¹å·žå¸‚é—¨å¸", + "71021": "苅田港", + "71022": "北ä¹å·žæ¸¯é’滨", + "71101": "ç¦å†ˆå¸‚åšå¤š", + "71120": "北ä¹å·žæ¸¯æ—¥æ˜Ž", + "71201": "大牟田市三池", + "71202": "太良町大浦野崎", + "71203": "三角", + "71220": "八代港", + "71221": "天è‰å¸‚本渡港", + "71222": "熊本港", + "72020": "唿´¥æ¸¯", + "72030": "玄海町å‡å±‹", + "73001": "é•¿å´Ž", + "73002": "å£ä¹‹æ´¥", + "73003": "ç¦æ±Ÿå²›ç¦æ±Ÿæ¸¯", + "73004": "ä½ä¸–ä¿", + "73020": "长崎港皇åŽ", + "73021": "平户市田平港", + "73101": "对马美津岛", + "73102": "对马比田胜", + "73110": "对马市严原", + "73120": "壹å²å²›ä¹¡ä¹‹æµ¦æ¸¯", + "74000": "苓北町都å•å•", + "75001": "大分", + "75020": "别府港", + "75100": "ä½ä¼¯å¸‚æ¾æµ¦", + "76001": "æ—¥å‘市细岛", + "76002": "æ—¥å—市油津", + "76020": "宫崎港", + "76050": "宮崎离岸90kmA", + "76051": "宮崎离岸90kmB", + "76070": "宮崎离岸60kmA", + "76071": "宮崎离岸60kmB", + "76080": "宮崎离岸40kmA", + "76090": "宫崎日å‘外海", + "77001": "ä½å¤šç”ºå¤§æ³Š", + "77002": "å—大隅町大泊", + "77020": "志布志港", + "77101": "ç§å­å²›ç”°ä¹‹èƒ", + "77102": "ç§å­å²›è¥¿ä¹‹è¡¨", + "77103": "ç§å­å²›ç†Šé‡Ž", + "77201": "åæ¿‘市å°å‡‘", + "77202": "åæ¿‘å¸‚åæ¿‘", + "77203": "中之岛", + "77204": "奄美市å°å‡‘", + "77205": "å¥„ç¾Žå¸‚åæ¿‘", + "77301": "鹿儿岛", + "77302": "枕崎", + "77303": "鹿儿岛", + "77330": "阿久根", + "80001": "那霸", + "80002": "久米岛", + "80003": "冲绳市中城湾港", + "80030": "å—城市安座真", + "80102": "å—大东渔港", + "80201": "宫å¤å²›å¹³è‰¯", + "80202": "石垣岛石垣港", + "80203": "西表岛", + "80204": "与那国岛久部良", + "80205": "石垣岛石垣港", + "80206": "宫å¤å²›å¹³è‰¯", + "91010": "é’路离岸110kmA", + "91011": "å胜离岸110kmA", + "91012": "å胜离岸120kmA", + "91020": "é’路离岸130kmA", + "91021": "é’路离岸130kmB", + "91030": "é’路离岸150kmA", + "91031": "å胜离岸150kmA", + "91032": "é’路离岸160kmA", + "91033": "é’路离岸170kmA", + "91040": "é’路离岸180kmA", + "92010": "é’æ£®ä¸œæ–¹ç¦»å²¸120kmA", + "92030": "é’æ£®ä¸œæ–¹ç¦»å²¸160kmA", + "92040": "é’æ£®ä¸œæ–¹ç¦»å²¸180kmA", + "92041": "é’æ£®ä¸œæ–¹ç¦»å²¸200kmA", + "92042": "é’æ£®ä¸œæ–¹ç¦»å²¸200kmB", + "92060": "é’æ£®ä¸œæ–¹ç¦»å²¸260kmA", + "92070": "é’æ£®ä¸œæ–¹ç¦»å²¸310kmA", + "92110": "岩手离岸110kmA", + "92111": "岩手离岸120kmA", + "92112": "岩手离岸120kmB", + "92120": "岩手离岸140kmA", + "92121": "岩手离岸140kmB", + "92122": "岩手离岸140kmC", + "92130": "岩手离岸150kmA", + "92131": "岩手离岸160kmA", + "92132": "岩手离岸170kmA", + "92133": "岩手离岸170kmB", + "92134": "岩手离岸170kmC", + "92150": "岩手离岸220kmA", + "92151": "岩手离岸230kmA", + "92152": "岩手离岸240kmA", + "92170": "岩手离岸380kmA", + "92171": "岩手离岸320kmA", + "92210": "宫城离岸110kmA", + "92211": "宫城离岸110kmB", + "92212": "宫城离岸120kmA", + "92220": "宫城离岸130kmA", + "92221": "宫城离岸140kmA", + "92230": "宫城离岸150kmA", + "92231": "宫城离岸160kmA", + "92232": "宫城离岸160kmB", + "92240": "宫城离岸180kmA", + "92241": "宫城离岸180kmB", + "92242": "宫城离岸190kmA", + "92250": "宫城离岸230kmA", + "92251": "宫城离岸240kmA", + "92270": "宫城离岸350kmA", + "92500": "ç¦å²›ç¦»å²¸100kmA", + "92510": "ç¦å²›ç¦»å²¸120kmA", + "92520": "ç¦å²›ç¦»å²¸130kmA", + "92521": "ç¦å²›ç¦»å²¸140kmA", + "92530": "ç¦å²›ç¦»å²¸160kmA", + "92531": "ç¦å²›ç¦»å²¸170kmA", + "92540": "ç¦å²›ç¦»å²¸180kmA", + "92550": "ç¦å²›ç¦»å²¸240kmA", + "92551": "ç¦å²›ç¦»å²¸250kmA", + "93010": "茨城离岸110kmA", + "93011": "茨城离岸120kmA", + "93020": "茨城离岸140kmA", + "93021": "茨城离岸140kmB", + "93030": "茨城离岸160kmA", + "93031": "茨城离岸160kmB", + "93050": "茨城离岸220kmA", + "93051": "茨城离岸240kmA", + "93100": "åƒå¶ä¸œæ–¹ç¦»å²¸100kmA", + "93110": "åƒå¶ä¸œæ–¹ç¦»å²¸110kmA", + "93111": "åƒå¶ä¸œå—离岸110kmA", + "93112": "åƒå¶ä¸œå—离岸120kmA", + "93113": "åƒå¶ä¸œå—离岸120kmB", + "93114": "åƒå¶ä¸œå—离岸120kmC", + "93120": "åƒå¶ä¸œå—离岸140kmA", + "93121": "åƒå¶ä¸œå—离岸140kmB", + "93130": "åƒå¶ä¸œå—离岸160kmA", + "93131": "åƒå¶ä¸œæ–¹ç¦»å²¸170kmA", + "93140": "åƒå¶ä¸œå—离岸180kmA", + "93141": "åƒå¶ä¸œæ–¹ç¦»å²¸180kmA", + "93142": "åƒå¶ä¸œæ–¹ç¦»å²¸190kmA", + "93143": "åƒå¶ä¸œæ–¹ç¦»å²¸200kmA", + "95300": "和歌山离岸100kmA", + "95301": "和歌山离岸100kmB", + "95302": "和歌山离岸100kmC", + "95303": "和歌山离岸100kmD", + "95310": "和歌山离岸110kmA", + "96110": "高知离岸110kmA", + "96111": "高知离岸120kmA", + "96112": "高知离岸120kmB", + "96113": "高知离岸120kmC", + "96120": "高知离岸130kmA", + "96121": "高知离岸140kmA", + "97600": "宫崎离岸100kmA", + "97620": "宫崎离岸130kmA" + } +} \ No newline at end of file diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/PointTsunami/zh.json.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/PointTsunami/zh.json.meta new file mode 100644 index 0000000..23f8a37 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/PointTsunami/zh.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 2c7dc2a5b357da042a45c8f32592c06b +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/PointVolcano.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/PointVolcano.meta new file mode 100644 index 0000000..1ceefbb --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/PointVolcano.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6744bc5bdd65c5941b3523df47346ca7 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/PointVolcano/en.json b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/PointVolcano/en.json new file mode 100644 index 0000000..6b52afe --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/PointVolcano/en.json @@ -0,0 +1,125 @@ +{ + "Culture": "en-US", + "Strings": { + "101": "Shiretoko-Iozan", + "102": "Rausudake", + "103": "Mashu", + "104": "Atosanupuri", + "105": "Meakandake", + "106": "Maruyama", + "107": "Taisetsuzan", + "108": "Tokachidake", + "109": "Tarumaesan", + "110": "Eniwadake", + "111": "Kuttara", + "112": "Usuzan", + "113": "Hokkaido-Komagatake", + "114": "Esan", + "115": "Oshima-Oshima", + "116": "Rishirizan", + "117": "Yoteizan", + "118": "Niseko", + "119": "Tenchozan", + "120": "Oakandake", + "151": "Moyorodake", + "152": "Chirippusan", + "153": "Sashiusudake", + "154": "Odamoisan", + "155": "Etorofu-Yakeyama", + "156": "Etorofu-Atosanupuri", + "157": "Berutarubesan", + "158": "Chachadake", + "159": "Raususan", + "160": "Tomariyama", + "161": "Ruruidake", + "201": "Osorezan", + "202": "Iwakisan", + "203": "Hakkodasan", + "204": "Towada", + "205": "Akita-Yakeyama", + "206": "Hachimantai", + "207": "Iwatesan", + "208": "Akita-Komagatake", + "209": "Chokaisan", + "210": "Kurikomayama", + "211": "Naruko", + "212": "Zaozan (Zaosan)", + "213": "Azumayama", + "214": "Adatarayama", + "215": "Bandaisan", + "216": "Hiuchigatake", + "217": "Hijiori", + "218": "Numazawa", + "301": "Nasudake", + "302": "Nikko-Shiranesan", + "303": "Akagisan", + "304": "Harunasan", + "305": "Kusatsu-Shiranesan", + "306": "Asamayama", + "307": "Niigata-Yakeyama", + "308": "Myokosan", + "309": "Midagahara", + "310": "Yakedake", + "311": "Norikuradake", + "312": "Ontakesan", + "313": "Hakusan", + "314": "Fujisan", + "315": "Hakoneyama", + "316": "Izu-Tobu Volcanoes", + "317": "Izu-Oshima", + "318": "Niijima", + "319": "Kozushima", + "320": "Miyakejima", + "321": "Hachijojima", + "322": "Aogashima", + "323": "Beyonesu (Bayonnaise) Rocks", + "324": "Sumisujima (Smith Rocks)", + "325": "Izu-Torishima", + "326": "Nishinoshima", + "327": "Kaitoku Seamount", + "328": "Funka Asane", + "329": "Ioto", + "330": "Kita-Fukutokutai", + "331": "Fukutoku-Oka-no-Ba", + "333": "Takaharayama", + "334": "Yokodake", + "335": "Akandanayama", + "336": "Toshima", + "337": "Mikurajima", + "338": "Sofugan", + "339": "Kaikata Seamount", + "340": "Minami-Hiyoshi Seamount", + "341": "Nikko Seamount", + "342": "Nantaisan", + "350": "Mt. Kusatsu-Shirane(Mt. Shirane(Yugama Area))", + "351": "Mt. Kusatsu-Shirane(Mt. Motoshirane)", + "401": "Sanbesan", + "502": "Kujusan", + "503": "Asosan", + "504": "Unzendake", + "505": "Kirishimayama", + "506": "Sakurajima", + "507": "Kaimondake", + "508": "Satsuma-Iojima", + "509": "Kuchinoerabujima", + "510": "Nakanoshima", + "511": "Suwanosejima", + "512": "Abu Volcanoes", + "513": "Tsurumidake and Garandake", + "514": "Yufudake", + "515": "Fukue Volcanoes", + "516": "Yonemaru and Sumiyoshiike", + "517": "Wakamiko", + "518": "Ikeda and Yamagawa", + "519": "Kuchinoshima", + "550": "Kirishimayama (Ohachi)", + "551": "Kirishimayama (Shinmoedake)", + "552": "Kirishimayama (Ebino Highland)", + "553": "Kirishimayama(Ohataike)", + "601": "Io-Torishima", + "602": "Submarine Volcano NNE of Iriomotejima", + "900": "Active volcanoes nationwide", + "901": "Other active volcanoes", + "902": "New active volcanoes" + } +} \ No newline at end of file diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/PointVolcano/en.json.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/PointVolcano/en.json.meta new file mode 100644 index 0000000..b57d81c --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/PointVolcano/en.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 6ac87e6548a5fcd458c5d9ba67e30ef8 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/PointVolcano/und.json b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/PointVolcano/und.json new file mode 100644 index 0000000..7465f0b --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/PointVolcano/und.json @@ -0,0 +1,125 @@ +{ + "Culture": "ja-JP", + "Strings": { + "101": "知床硫黄山", + "102": "羅臼岳", + "103": "摩周", + "104": "アトサヌプリ", + "105": "雌阿寒岳", + "106": "丸山", + "107": "大雪山", + "108": "åå‹å²³", + "109": "樽å‰å±±", + "110": "æµåº­å²³", + "111": "倶多楽", + "112": "有ç å±±", + "113": "北海é“駒ヶ岳", + "114": "æµå±±", + "115": "渡島大島", + "116": "利尻山", + "117": "羊蹄山", + "118": "ニセコ", + "119": "天頂山", + "120": "雄阿寒岳", + "151": "茂世路岳", + "152": "散布山", + "153": "指臼岳", + "154": "å°ç”°èŒå±±", + "155": "択æ‰ç„¼å±±", + "156": "択æ‰é˜¿ç™»ä½å²³", + "157": "ベルタルベ山", + "158": "爺爺岳", + "159": "羅臼山", + "160": "泊山", + "161": "ルルイ岳", + "201": "æå±±", + "202": "岩木山", + "203": "八甲田山", + "204": "å和田", + "205": "秋田焼山", + "206": "八幡平", + "207": "岩手山", + "208": "秋田駒ヶ岳", + "209": "鳥海山", + "210": "æ —é§’å±±", + "211": "é³´å­", + "212": "蔵王山", + "213": "å¾å¦»å±±", + "214": "安é”太良山", + "215": "ç£æ¢¯å±±", + "216": "燧ヶ岳", + "217": "肘折", + "218": "沼沢", + "301": "那須岳", + "302": "日光白根山", + "303": "赤城山", + "304": "榛åå±±", + "305": "è‰æ´¥ç™½æ ¹å±±", + "306": "æµ…é–“å±±", + "307": "新潟焼山", + "308": "妙高山", + "309": "弥陀ヶ原", + "310": "焼岳", + "311": "ä¹—éžå²³", + "312": "御嶽山", + "313": "白山", + "314": "富士山", + "315": "箱根山", + "316": "伊豆æ±éƒ¨ç«å±±ç¾¤", + "317": "伊豆大島", + "318": "æ–°å³¶", + "319": "神津島", + "320": "三宅島", + "321": "八丈島", + "322": "é’ヶ島", + "323": "ベヨãƒãƒ¼ã‚¹åˆ—岩", + "324": "須美寿島", + "325": "伊豆鳥島", + "326": "西之島", + "327": "海徳海山", + "328": "å™´ç«æµ…æ ¹", + "329": "硫黄島", + "330": "北ç¦å¾³å †", + "331": "ç¦å¾³å²¡ãƒŽå ´", + "333": "高原山", + "334": "横岳", + "335": "アカンダナ山", + "336": "利島", + "337": "御蔵島", + "338": "孀婦岩", + "339": "海形海山", + "340": "å—æ—¥å‰æµ·å±±", + "341": "日光海山", + "342": "男体山", + "350": "è‰æ´¥ç™½æ ¹å±±ï¼ˆç™½æ ¹å±±ï¼ˆæ¹¯é‡œä»˜è¿‘))", + "351": "è‰æ´¥ç™½æ ¹å±±ï¼ˆæœ¬ç™½æ ¹å±±ï¼‰", + "401": "三瓶山", + "502": "ä¹é‡å±±", + "503": "阿蘇山", + "504": "雲仙岳", + "505": "霧島山", + "506": "桜島", + "507": "é–‹èžå²³", + "508": "薩摩硫黄島", + "509": "壿°¸è‰¯éƒ¨å³¶", + "510": "中之島", + "511": "è«è¨ªä¹‹ç€¬å³¶", + "512": "阿武ç«å±±ç¾¤", + "513": "鶴見岳・伽è—å²³", + "514": "由布岳", + "515": "ç¦æ±Ÿç«å±±ç¾¤", + "516": "米丸・ä½å‰æ± ", + "517": "若尊", + "518": "池田・山å·", + "519": "å£ä¹‹å³¶", + "550": "霧島山(御鉢)", + "551": "霧島山(新燃岳)", + "552": "霧島山(ãˆã³ã®é«˜åŽŸï¼ˆç¡«é»„å±±ï¼‰å‘¨è¾ºï¼‰", + "553": "霧島山(大幡池)", + "601": "硫黄鳥島", + "602": "è¥¿è¡¨å³¶åŒ—åŒ—æ±æµ·åº•ç«å±±", + "900": "å…¨å›½ã®æ´»ç«å±±", + "901": "ãã®ä»–ã®æ´»ç«å±±", + "902": "æ–°ãŸãªæ´»ç«å±±" + } +} \ No newline at end of file diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/PointVolcano/und.json.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/PointVolcano/und.json.meta new file mode 100644 index 0000000..77c7a64 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/PointVolcano/und.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 33f290b124b6bcb499045172d6b4d3c9 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/PointVolcano/yue.json b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/PointVolcano/yue.json new file mode 100644 index 0000000..37f3239 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/PointVolcano/yue.json @@ -0,0 +1,125 @@ +{ + "Culture": "yue-HK", + "Strings": { + "101": "知床硫磺山", + "102": "羅臼嶽", + "103": "摩周", + "104": "硫磺山", + "105": "雌阿寒嶽", + "106": "丸山", + "107": "大雪山", + "108": "åå‹å¶½", + "109": "樽å‰å±±", + "110": "惠庭嶽", + "111": "俱多樂", + "112": "有ç å±±", + "113": "北海é“é§’å¶½", + "114": "惠山", + "115": "渡島大島", + "116": "利尻山", + "117": "羊蹄山", + "118": "新雪谷", + "119": "天頂山", + "120": "雄阿寒嶽", + "151": "茂世路嶽", + "152": "散佈山", + "153": "指臼嶽", + "154": "å°ç”°èŒå±±", + "155": "擇æ‰ç‡’å±±", + "156": "擇æ‰é˜¿ç™»ä½å¶½", + "157": "別魯塔魯別ç«å±±", + "158": "爺爺嶽", + "159": "羅臼山", + "160": "泊山", + "161": "魯魯伊岳", + "201": "æå±±", + "202": "岩木山", + "203": "八甲田山", + "204": "å和田", + "205": "秋田燒山", + "206": "八幡平", + "207": "岩手山", + "208": "ç§‹ç”°é§’å¶½", + "209": "鳥海山", + "210": "æ —é§’å±±", + "211": "é³´å­", + "212": "è—王山", + "213": "å¾å¦»å±±", + "214": "安é”太良山", + "215": "ç£æ¢¯å±±", + "216": "燧嶽", + "217": "肘折", + "218": "沼澤", + "301": "那須嶽", + "302": "日光白根山", + "303": "赤城山", + "304": "榛åå±±", + "305": "è‰æ´¥ç™½æ ¹å±±", + "306": "淺間山", + "307": "新潟燒山", + "308": "妙高山", + "309": "彌陀原", + "310": "燒嶽", + "311": "ä¹—éžå¶½", + "312": "御嶽山", + "313": "白山", + "314": "富士山", + "315": "箱根山", + "316": "伊豆æ±éƒ¨ç«å±±ç¾¤", + "317": "伊豆大島", + "318": "æ–°å³¶", + "319": "神津島", + "320": "三宅島", + "321": "八丈島", + "322": "é’å³¶", + "323": "巴榮ç´åˆ—岩", + "324": "須美壽島", + "325": "伊豆鳥島", + "326": "西之島", + "327": "æµ·å¾·æµ·å±±", + "328": "å™´ç«æ·ºæ ¹", + "329": "硫磺島", + "330": "北ç¦å¾·å †", + "331": "ç¦å¾·å²¡ä¹‹å ´", + "333": "高原山", + "334": "æ©«å¶½", + "335": "赤棚山", + "336": "利島", + "337": "御è—å³¶", + "338": "孀婦岩", + "339": "海形海山", + "340": "å—æ—¥å‰æµ·å±±", + "341": "日光海山", + "342": "男體山", + "350": "è‰æ´¥ç™½æ ¹å±±ï¼ˆç™½æ ¹å±±ï¼ˆæ¹¯é‡œä»˜è¿‘))", + "351": "è‰æ´¥ç™½æ ¹å±±ï¼ˆæœ¬ç™½æ ¹å±±ï¼‰", + "401": "三瓶山", + "502": "ä¹é‡å±±", + "503": "阿蘇山", + "504": "雲仙嶽", + "505": "霧島山", + "506": "櫻島", + "507": "é–‹èžå¶½", + "508": "薩摩硫磺島", + "509": "壿°¸è‰¯éƒ¨å³¶", + "510": "中之島", + "511": "è«è¨ªä¹‹ç€¬å³¶", + "512": "阿武ç«å±±ç¾¤", + "513": "鶴見岳ã€ä¼½è—å¶½", + "514": "由布嶽", + "515": "ç¦æ±Ÿç«å±±ç¾¤", + "516": "米丸ã€ä½å‰æ± ", + "517": "若尊", + "518": "æ± ç”°ã€å±±å·", + "519": "å£ä¹‹å³¶", + "550": "霧島山(御鉢)", + "551": "霧島山(新燃嶽)", + "552": "霧島山(è¦é‡Žé«˜åŽŸï¼ˆç¡«ç£ºå±±ï¼‰å‘¨é‚Šï¼‰", + "553": "霧島山(大幡池)", + "601": "硫磺鳥島", + "602": "è¥¿è¡¨å³¶åŒ—åŒ—æ±æµ·åº•ç«å±±", + "900": "全國嘅活ç«å±±", + "901": "å…¶ä»–æ´»ç«å±±", + "902": "新嘅活ç«å±±" + } +} \ No newline at end of file diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/PointVolcano/yue.json.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/PointVolcano/yue.json.meta new file mode 100644 index 0000000..1979b2e --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/PointVolcano/yue.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 6eb3cfcd8f5e60b46b75a94a2efa3be0 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/PointVolcano/zh-Hant.json b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/PointVolcano/zh-Hant.json new file mode 100644 index 0000000..f4b44e7 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/PointVolcano/zh-Hant.json @@ -0,0 +1,125 @@ +{ + "Culture": "zh-TW", + "Strings": { + "101": "知床硫磺山", + "102": "羅臼嶽", + "103": "摩周", + "104": "硫磺山", + "105": "雌阿寒嶽", + "106": "丸山", + "107": "大雪山", + "108": "åå‹å¶½", + "109": "樽å‰å±±", + "110": "惠庭嶽", + "111": "俱多樂", + "112": "有ç å±±", + "113": "北海é“é§’å¶½", + "114": "惠山", + "115": "渡島大島", + "116": "利尻山", + "117": "羊蹄山", + "118": "新雪谷", + "119": "天頂山", + "120": "雄阿寒嶽", + "151": "茂世路嶽", + "152": "散佈山", + "153": "指臼嶽", + "154": "å°ç”°èŒå±±", + "155": "擇æ‰ç‡’å±±", + "156": "擇æ‰é˜¿ç™»ä½å¶½", + "157": "別魯塔魯別ç«å±±", + "158": "爺爺嶽", + "159": "羅臼山", + "160": "泊山", + "161": "魯魯伊岳", + "201": "æå±±", + "202": "岩木山", + "203": "八甲田山", + "204": "å和田", + "205": "秋田燒山", + "206": "八幡平", + "207": "岩手山", + "208": "ç§‹ç”°é§’å¶½", + "209": "鳥海山", + "210": "æ —é§’å±±", + "211": "é³´å­", + "212": "è—王山", + "213": "å¾å¦»å±±", + "214": "安é”太良山", + "215": "ç£æ¢¯å±±", + "216": "燧嶽", + "217": "肘折", + "218": "沼澤", + "301": "那須嶽", + "302": "日光白根山", + "303": "赤城山", + "304": "榛åå±±", + "305": "è‰æ´¥ç™½æ ¹å±±", + "306": "淺間山", + "307": "新潟燒山", + "308": "妙高山", + "309": "彌陀原", + "310": "燒嶽", + "311": "ä¹—éžå¶½", + "312": "御嶽山", + "313": "白山", + "314": "富士山", + "315": "箱根山", + "316": "伊豆æ±éƒ¨ç«å±±ç¾¤", + "317": "伊豆大島", + "318": "æ–°å³¶", + "319": "神津島", + "320": "三宅島", + "321": "八丈島", + "322": "é’å³¶", + "323": "巴榮ç´åˆ—岩", + "324": "須美壽島", + "325": "伊豆鳥島", + "326": "西之島", + "327": "æµ·å¾·æµ·å±±", + "328": "å™´ç«æ·ºæ ¹", + "329": "硫磺島", + "330": "北ç¦å¾·å †", + "331": "ç¦å¾·å²¡ä¹‹å ´", + "333": "高原山", + "334": "æ©«å¶½", + "335": "赤棚山", + "336": "利島", + "337": "御è—å³¶", + "338": "孀婦岩", + "339": "海形海山", + "340": "å—æ—¥å‰æµ·å±±", + "341": "日光海山", + "342": "男體山", + "350": "è‰æ´¥ç™½æ ¹å±±ï¼ˆç™½æ ¹å±±ï¼ˆæ¹¯é‡œä»˜è¿‘))", + "351": "è‰æ´¥ç™½æ ¹å±±ï¼ˆæœ¬ç™½æ ¹å±±ï¼‰", + "401": "三瓶山", + "502": "ä¹é‡å±±", + "503": "阿蘇山", + "504": "雲仙嶽", + "505": "霧島山", + "506": "櫻島", + "507": "é–‹èžå¶½", + "508": "薩摩硫磺島", + "509": "壿°¸è‰¯éƒ¨å³¶", + "510": "中之島", + "511": "è«è¨ªä¹‹ç€¬å³¶", + "512": "阿武ç«å±±ç¾¤", + "513": "鶴見岳ã€ä¼½è—å¶½", + "514": "由布嶽", + "515": "ç¦æ±Ÿç«å±±ç¾¤", + "516": "米丸ã€ä½å‰æ± ", + "517": "若尊", + "518": "æ± ç”°ã€å±±å·", + "519": "å£ä¹‹å³¶", + "550": "霧島山(御鉢)", + "551": "霧島山(新燃嶽)", + "552": "霧島山(è¦é‡Žé«˜åŽŸï¼ˆç¡«ç£ºå±±ï¼‰å‘¨é‚Šï¼‰", + "553": "霧島山(大幡池)", + "601": "硫磺鳥島", + "602": "è¥¿è¡¨å³¶åŒ—åŒ—æ±æµ·åº•ç«å±±", + "900": "全國的活ç«å±±", + "901": "å…¶ä»–æ´»ç«å±±", + "902": "新的活ç«å±±" + } +} \ No newline at end of file diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/PointVolcano/zh-Hant.json.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/PointVolcano/zh-Hant.json.meta new file mode 100644 index 0000000..c93a21f --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/PointVolcano/zh-Hant.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 7a7105664ee671844950387151884914 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/PointVolcano/zh.json b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/PointVolcano/zh.json new file mode 100644 index 0000000..e700163 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/PointVolcano/zh.json @@ -0,0 +1,125 @@ +{ + "Culture": "zh-CN", + "Strings": { + "101": "知床硫磺山", + "102": "罗臼岳", + "103": "摩周", + "104": "硫磺山", + "105": "雌阿寒岳", + "106": "丸山", + "107": "大雪山", + "108": "å胜岳", + "109": "樽å‰å±±", + "110": "惠庭岳", + "111": "俱多ä¹", + "112": "有ç å±±", + "113": "北海é“驹岳", + "114": "惠山", + "115": "渡岛大岛", + "116": "利尻山", + "117": "羊蹄山", + "118": "新雪谷", + "119": "天顶山", + "120": "雄阿寒岳", + "151": "茂世路岳", + "152": "散布山", + "153": "指臼山", + "154": "å°ç”°èŒå±±", + "155": "æ‹©æ‰çƒ§å±±", + "156": "æ‹©æ‰é˜¿ç™»ä½å²³", + "157": "别é²å¡”é²åˆ«ç«å±±", + "158": "爷爷岳", + "159": "罗臼山", + "160": "泊山", + "161": "é²é²ä¼Šå²³", + "201": "æå±±", + "202": "岩木山", + "203": "八甲田山", + "204": "å和田", + "205": "秋田烧山", + "206": "八幡平", + "207": "岩手山", + "208": "秋田驹岳", + "209": "鸟海山", + "210": "栗驹山", + "211": "鸣å­", + "212": "è—王山", + "213": "å¾å¦»å±±", + "214": "安达太良山", + "215": "ç£æ¢¯å±±", + "216": "燧岳", + "217": "肘折", + "218": "沼泽", + "301": "那须岳", + "302": "日光白根山", + "303": "赤城山", + "304": "榛åå±±", + "305": "è‰æ´¥ç™½æ ¹å±±", + "306": "æµ…é—´å±±", + "307": "新潟烧山", + "308": "妙高山", + "309": "弥陀原", + "310": "烧岳", + "311": "乘éžå²³", + "312": "御岳山", + "313": "白山", + "314": "富士山", + "315": "箱根山", + "316": "伊豆东部ç«å±±ç¾¤", + "317": "伊豆大岛", + "318": "æ–°å²›", + "319": "神津岛", + "320": "三宅岛", + "321": "八丈岛", + "322": "é’å²›", + "323": "å·´è£çº³åˆ—岩", + "324": "须美寿岛", + "325": "伊豆鸟岛", + "326": "西之岛", + "327": "æµ·å¾·æµ·å±±", + "328": "å–·ç«æµ…æ ¹", + "329": "硫磺岛", + "330": "北ç¦å¾·å †", + "331": "ç¦å¾·å†ˆä¹‹åœº", + "333": "高原山", + "334": "横岳", + "335": "赤棚山", + "336": "利岛", + "337": "御è—å²›", + "338": "孀妇岩", + "339": "海形海山", + "340": "å—æ—¥å‰æµ·å±±", + "341": "日光海山", + "342": "男体山", + "350": "è‰æ´¥ç™½æ ¹å±±ï¼ˆç™½æ ¹å±±ï¼ˆæ±¤é‡œé™„近))", + "351": "è‰æ´¥ç™½æ ¹å±±ï¼ˆæœ¬ç™½æ ¹å±±ï¼‰", + "401": "三瓶山", + "502": "ä¹é‡å±±", + "503": "阿è‹å±±", + "504": "云仙岳", + "505": "雾岛山", + "506": "樱岛", + "507": "开闻岳", + "508": "è¨æ‘©ç¡«ç£ºå²›", + "509": "壿°¸è‰¯éƒ¨å²›", + "510": "中之岛", + "511": "诹访之濑岛", + "512": "阿武ç«å±±ç¾¤", + "513": "鹤è§å²³ã€ä¼½è“å²³", + "514": "由布岳", + "515": "ç¦æ±Ÿç«å±±ç¾¤", + "516": "米丸ã€ä½å‰æ± ", + "517": "若尊", + "518": "æ± ç”°ã€å±±å·", + "519": "å£ä¹‹å²›", + "550": "雾岛山(御钵)", + "551": "雾岛山(新燃岳)", + "552": "雾岛山(海è€é‡Žé«˜åŽŸï¼ˆç¡«ç£ºå±±ï¼‰å‘¨è¾¹ï¼‰", + "553": "雾岛山(大幡池)", + "601": "硫磺鸟岛", + "602": "西表岛北北东海底ç«å±±", + "900": "全国的活ç«å±±", + "901": "å…¶ä»–æ´»ç«å±±", + "902": "新的活ç«å±±" + } +} \ No newline at end of file diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/PointVolcano/zh.json.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/PointVolcano/zh.json.meta new file mode 100644 index 0000000..d21904c --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/PointVolcano/zh.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 00bdec73cf03ea243b585f73a931c8fb +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/en.json b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/en.json new file mode 100644 index 0000000..d71bef5 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/en.json @@ -0,0 +1,8 @@ +{ + "Culture": "en-US", + "Strings": { + "IntensitySuffixLower": "-lower", + "IntensitySuffixUpper": "-upper", + "Unknown": "unknown" + } +} \ No newline at end of file diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/en.json.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/en.json.meta new file mode 100644 index 0000000..9838c1f --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/en.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 93efa9373cea56040a24a5721c99e2a6 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/und.json b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/und.json new file mode 100644 index 0000000..84e027c --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/und.json @@ -0,0 +1,8 @@ +{ + "Culture": "ja-JP", + "Strings": { + "IntensitySuffixLower": "å¼±", + "IntensitySuffixUpper": "å¼·", + "Unknown": "䏿˜Ž" + } +} \ No newline at end of file diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/und.json.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/und.json.meta new file mode 100644 index 0000000..7464838 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/und.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 3d2e216146e31f443950800e261c73c4 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/yue.json b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/yue.json new file mode 100644 index 0000000..aa33627 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/yue.json @@ -0,0 +1,8 @@ +{ + "Culture": "yue-HK", + "Strings": { + "IntensitySuffixLower": "å¼±", + "IntensitySuffixUpper": "å¼·", + "Unknown": "䏿˜Ž" + } +} \ No newline at end of file diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/yue.json.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/yue.json.meta new file mode 100644 index 0000000..f1fcd9e --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/yue.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 2ddbdf1f21707404e8f0ac8a61ff5845 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/zh-Hant.json b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/zh-Hant.json new file mode 100644 index 0000000..9b49c7e --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/zh-Hant.json @@ -0,0 +1,8 @@ +{ + "Culture": "zh-TW", + "Strings": { + "IntensitySuffixLower": "å¼±", + "IntensitySuffixUpper": "å¼·", + "Unknown": "䏿˜Ž" + } +} \ No newline at end of file diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/zh-Hant.json.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/zh-Hant.json.meta new file mode 100644 index 0000000..a685337 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/zh-Hant.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: ef71d009819f8944a8a32f499e9d5e29 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/zh.json b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/zh.json new file mode 100644 index 0000000..71b2468 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/zh.json @@ -0,0 +1,8 @@ +{ + "Culture": "zh-CN", + "Strings": { + "IntensitySuffixLower": "å¼±", + "IntensitySuffixUpper": "强", + "Unknown": "䏿˜Ž" + } +} \ No newline at end of file diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/zh.json.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/zh.json.meta new file mode 100644 index 0000000..08df599 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.JMA/zh.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: b71374b8a3bfa8246828708a6bc09ffc +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.JMAAtom.TTS.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.JMAAtom.TTS.meta new file mode 100644 index 0000000..e8aa4d0 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.JMAAtom.TTS.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e2d2eef3051d5614a818599cd0249188 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.JMAAtom.TTS/en.json b/Assets/StreamingAssets/Messages/Cryville.EEW.JMAAtom.TTS/en.json new file mode 100644 index 0000000..8ca7cde --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.JMAAtom.TTS/en.json @@ -0,0 +1,270 @@ +{ + "Culture": "en-US", + "Strings": { + "AshInfo": "From {0:h tt} to {1:h tt}, {2}.", + "AshInfoItem": "areas up to {1} kilometers to the {0} will undergo {2}", + "Cancel": "Cancels the {0} issued just now.", + "EarthquakeCount": "From {0:d MMM HH:00} to {1:d MMM HH:00}{2}.", + "EarthquakeCountFeltNumber": ", felt earthquake occurred {0} times", + "EarthquakeCountNumber": ", earthquake occurred {0} times", + "EarthquakeCountTotal": "In total, {0}", + "EarthquakeHypocenterArea": "The hypocenter is in {0}.", + "EarthquakeHypocenterDepth": "The hypocenter depth is around {0} kilometers.", + "EarthquakeHypocenterDepth0": "The hypocenter depth is very shallow.", + "EarthquakeHypocenterDepthUnknown": "The hypocenter depth is unknown.", + "EarthquakeMagnitude": "The magnitude of the earthquake is estimated at {0:F1}.", + "EarthquakeMultiple": "This information has multiple related earthquakes.", + "EarthquakeMultipleIndex": "Earthquake {0}", + "HeadlineAshDetailed": "As for this {0} eruption, detailed forecasts of ash fall during the hours are as follows.", + "HeadlineAshPreliminary": "As for this {0} eruption, forecasts of ash fall are as follows.", + "HeadlineAshScheduled": "If {0} erupts, forecasts of ash fall per period are as follows.", + "HeadlineEarthquake": "At {0:d MMM HH:mm}, an earthquake occurred.", + "HeadlineEruption": "At {0:d MMM HH:mm}, {1} {2}.", + "HeadlineIntensity": "At {0:d MMM HH:mm}, strong tremors from an earthquake was perceived.", + "HeadlinePlume": "As for this {0} eruption, estimated plume direction is as follows.", + "HeadlineTsunamiInformationForecast": "The high tide time and estimated initial tsunami arrival time per area is as follows.", + "HeadlineTsunamiInformationObservation": "Currently, tsunami observed is as follows.", + "HeadlineTsunamiWarning": "{0} has been issued.", + "HeadlineTsunamiWarningLifted": "{0} has been lifted.", + "HeadlineTsunamiWarningUpdate": "The current {0} in effect has been updated.", + "Intensity": "seismic intensity", + "IntensityObservation": "In this earthquake, ", + "IntensityObservationArea": "{0} {1} was observed in {2}.", + "IntensityObservationMax": "This earthquake resulted in {0} of the maximum seismic intensity recorded.", + "LongIntensity": "long-period ground motion intensity", + "LongIntensityObservationMax": "This earthquake resulted in {0} of the maximum long-period ground motion intensity recorded.", + "Maximum": "the maximum {0}", + "MinorItemSeparator": "; ", + "PlumeDirectionValue": "{0} direction", + "TsunamiForecast": "{0} has been issued for the following coastal regions of Japan.", + "TsunamiForecastArea": "{0}. {1}.", + "TsunamiForecastFirstHeightArrivalTime": "Estimated arrival time {0:t}", + "TsunamiForecastMaxHeight": "Estimated tsunami height {0}.", + "TsunamiForecastSuffix": "Information related to the earthquake", + "TsunamiHeightValue": "{0} meters", + "TsunamiHeightValueAffix": "{0}", + "TsunamiHeightValueAffixBelow": "below {0}", + "TsunamiHeightValueAffixOver": "over {0}", + "TsunamiObservationMaxHeightRising": " Rising.", + "TsunamiObservationStation": "{1}, {0}. {2}.", + "TsunamiObservationStationNoArea": "{0}. {1}.", + "VolcanoObservationColorPlume": "colored plumes", + "VolcanoObservationPlume": "The observation of {0} is as follows.", + "VolcanoObservationPlumeDirection": "The plume flows to the {0}.", + "VolcanoObservationPlumeDirectionUnknown": "The plume direction is unknown.", + "VolcanoObservationPlumeHeightAboveCrater": "The plume height is {0} above the crater.", + "VolcanoObservationPlumeHeightAboveCraterUnknown": "The plume height is unknown.", + "VolcanoObservationPlumeNone": "This eruption produced no {0}.", + "VolcanoObservationWhitePlume": "white plumes", + "VolcanoObservationWindAboveCrater": "At sea level {0} feet, the estimated wind degree is {1}, and the wind speed is {2}." + }, + "StringSets": { + "AdditionalCommentEarthquake": { + "Strings": { + "0101": "There may be slight sea-level changes for a while.", + "0102": "There may be slight sea-level changes for a while, with no damage.", + "0103": "Sea-level changes may be observed for a while.", + "0104": "Pay attention when fishing, swimming or engaging in other marine activities, as there may still be slight sea-level changes for a while.", + "0105": "Pay attention when fishing or engaging in other marine activities, as there may still be slight sea-level changes for a while.", + "0107": "No Major Tsunami Warnings, Tsunami Warnings, or Advisories are currently in effect.", + "0109": "Exercise extreme caution if a tsunami arrives at high tide, as this boosts the height of waves.", + "0110": "Pay attention if a tsunami arrives at high tide, as this boosts the height of waves.", + "0111": "In some coastal regions, tsunami waves higher than those recorded may have arrived.", + "0112": "It is possible that the tsunami height will increase even further in the future.", + "0113": "In some coastal regions where tsunami waves are estimated from offshore observations, tsunami may have already arrived.", + "0114": "Tsunami waves may reach their maximum height a few hours or more after the estimated arrival time.", + "0115": "Tsunami waves are observed offshore, and can become higher near the coast.", + "0121": "Major Tsunami Warning\nGigantic tsunami is hitting, causing destructive damage.\nEvacuate immediately from coastal regions and riverside areas to a safer place such as high ground or an evacuation building.\nTsunami waves are expected to hit repeatedly. Do not leave safe ground until the warning is lifted.", + "0122": "Tsunami Warning\nTsunami will cause damage.\nEvacuate immediately from coastal regions and riverside areas to a safer place such as high ground or an evacuation building.\nTsunami waves are expected to hit repeatedly. Do not leave safe ground until the warning is lifted.", + "0123": "Tsunami Advisory\nDanger in the sea and coastal regions.\nGet out of the water and leave coastal regions immediately.\nDue to the risk of ongoing strong currents, do not enter the sea or approach coastal regions until the advisory is lifted.", + "0124": "Tsunami Forecast (slight sea-level changes)\nThere will be slight sea-level changes, with no damage.", + "0131": "In the regions where warnings have been issued, evacuate immediately from coastal regions and riverside areas to a safer place such as high ground or an evacuation building.\nEstimated tsunami arrival times show the earliest expected strikes for each tsunami forecast region. In some coastal regions, tsunami waves may hit after this time.\nAs tsunami waves may reach their maximum height a few hours or more after the estimated arrival time, do not leave safe ground until the warning is lifted regardless of recorded tsunami heights.", + "0132": "Actual tsunami heights may exceed estimations in some coastal regions.", + "0141": "A gigantic tsunami is expected to hit.", + "0142": "Upgrade to Major Tsunami Warnings and Tsunami Warnings implemented in response to high tsunami waves observed offshore.", + "0143": "Major Tsunami Warnings and Tsunami Warnings updated, in response to high tsunami waves observed offshore.", + "0144": "Upgrade to Major Tsunami Warnings implemented in response to high tsunami waves observed offshore.", + "0145": "Major Tsunami Warnings updated, in response to high tsunami waves observed offshore.", + "0146": "Upgrade to Tsunami Warnings implemented in response to high tsunami waves observed offshore.", + "0147": "Tsunami Warnings updated, in response to high tsunami waves observed offshore.", + "0148": "Estimated tsunami heights updated, in response to high tsunami waves observed offshore.", + "0149": "Evacuate immediately.", + "0150": "Nankai Trough Earthquake Extra Information is in effect.", + "0201": "Watch out for strong shaking.", + "0211": "Tsunami warnings or advisories are currently in effect.", + "0212": "Although there may be slight sea-level changes in coastal regions, this earthquake causes no tsunami damage to Japan.", + "0213": "Pay attention when fishing, swimming or engaging in other marine activities, as there may still be slight sea-level changes for a while.", + "0214": "Pay attention when fishing or engaging in other marine activities, as there may still be slight sea-level changes for a while.", + "0215": "This earthquake poses no tsunami risk.", + "0216": "If the epicenter is under the sea, a tsunami may occur.", + "0217": "Check the information which will be issued from now on.", + "0221": "There is a possibility of a destructive ocean-wide tsunami in the Pacific Ocean.", + "0222": "There is a possibility of a destructive regional tsunami in the Pacific Ocean.", + "0223": "There is a possibility of a destructive regional tsunami in the Northwest Pacific Ocean.", + "0224": "There is a possibility of a destructive ocean-wide tsunami in the Indian Ocean.", + "0225": "There is a possibility of a destructive regional tsunami in the Indian Ocean.", + "0226": "There is a possibility of a destructive local tsunami near the epicenter.", + "0227": "Minor local tsunami may occur near the epicenter, but no tsunami damage is expected.", + "0228": "A shallow earthquake with the same magnitude in a sea area may generate a tsunami.", + "0229": "The possibility of tsunami generation toward Japan in currently under evaluation.", + "0230": "This earthquake poses no tsunami risk to Japan.", + "0241": "Earthquake Early Warning is in effect for this earthquake.", + "0242": "Earthquake Early Warning is in effect for this earthquake. Its maximum seismic intensity was 2.", + "0243": "Earthquake Early Warning is in effect for this earthquake. Its maximum seismic intensity was 1.", + "0244": "Earthquake Early Warning is in effect for this earthquake. There was no observation of seismic intensity 1 or above.", + "0245": "Earthquake Early Warning was issued for this earthquake, however no strong tremors were observed.", + "0256": "Information related to the hypocenter has been corrected." + } + }, + "EarthquakeMagnitudeUnknown": { + "Strings": { + "": "The magnitude of the earthquake is unknown.", + "M8を超ãˆã‚‹å·¨å¤§åœ°éœ‡": "This earthquake is estimated to be a massive earthquake of magnitude 8 and above." + } + }, + "HeadlineVolcanoWarning": { + "Strings": { + "": "Currently, {0} is at volcanic warning {2}.", + "引上ã’": "The volcanic warning of {0} is being upgraded from {1} to {2}.", + "引下ã’": "The volcanic warning of {0} is being downgraded from {1} to {2}." + } + }, + "NankaiTroughInfo": { + "Strings": { + "111": "An earthquake of magnitude 6.8 or greater occurred within the Nankai Trough earthquake monitoring area.\nThe Japan Meteorological Agency has begun an investigation into the relationship between this earthquake and the Nankai Trough earthquake, and will hold an evaluation committee on earthquakes along the Nankai Trough.\nIf you live in an area expected to be affected by a Nankai Trough earthquake, please take actions to ensure your own safety according to your individual circumstances.", + "112": "Significant changes have been observed at the strain observation points, and the changes are large.\nThe Japan Meteorological Agency has begun an investigation into the relationship between the observed phenomenon and the Nankai Trough earthquake, and will hold an evaluation committee on earthquakes along the Nankai Trough.\nIf you live in an area expected to be affected by a Nankai Trough earthquake, please pay attention to future information.", + "113": "Phenomena were observed that may indicate a change in the fixed state of the plate boundaries within the expected focal region.\nThe Japan Meteorological Agency has begun an investigation into the relationship between the observed phenomenon and the Nankai Trough earthquake, and will hold an evaluation committee on earthquakes along the Nankai Trough.\nIf you live in an area expected to be affected by a Nankai Trough earthquake, please pay attention to future information.", + "120": "The Japan Meteorological Agency held an emergency evaluation committee on earthquakes along the Nankai Trough. As the moment magnitude of this earthquake exceeds 8.0, it is believed that the possibility of a large earthquake occurring is relatively higher than normal in the expected focal zone of a Nankai Trough earthquake, including the areas which was not the focal zone of this earthquake.\nPlease take disaster prevention measures in accordance with future appeals from the government and local governments.\nThe Japan Meteorological Agency will continue to closely monitor changes in crustal activity along the Nankai Trough.", + "130": "The Japan Meteorological Agency held an emergency evaluation committee on earthquakes along the Nankai Trough. It is believed that the possibility of a large earthquake occurring is relatively higher than normal in the expected focal zone of a Nankai Trough earthquake.\nPlease take disaster prevention measures in accordance with future appeals from the government and local governments.\nThe Japan Meteorological Agency will continue to closely monitor changes in crustal activity along the Nankai Trough.", + "190": "The Japan Meteorological Agency held an emergency evaluation committee on earthquakes along the Nankai Trough. It is believed that no significant changes have been observed that would suggest a relatively increased possibility of a large earthquake occurring along the Nankai Trough compared to normal times.\nThe Japan Meteorological Agency will continue to closely monitor changes in crustal activity along the Nankai Trough.", + "200": "The Japan Meteorological Agency held an evaluation committee on earthquakes along the Nankai Trough. No significant changes have been observed that would suggest a relatively increased possibility of a large earthquake occurring along the Nankai Trough compared to normal times.", + "210": "The government is calling on areas promoting disaster prevention measures for the Nankai Trough earthquake to take cautions. Please continue to take disaster prevention measures in accordance with future appeals from the government and local governments.\nThe Japan Meteorological Agency will continue to closely monitor changes in crustal activity along the Nankai Trough.", + "219": "The government is calling on areas promoting disaster prevention measures for the Nankai Trough earthquake to take cautions. Please continue to take disaster prevention measures in accordance with future appeals from the government and local governments.\nThe Japan Meteorological Agency will continue to closely monitor changes in crustal activity along the Nankai Trough." + } + }, + "PlumeDirection": { + "Strings": { + "北": "north", + "北æ±": "northeast", + "北西": "northwest", + "å—": "south", + "å—æ±": "southeast", + "å—西": "southwest", + "æ–¹å‘ä¸å®š": "uncertain", + "æ±": "east", + "ç«å£è¿‘å‚": "nearby", + "直上": "straight up", + "西": "west" + } + }, + "Status": { + "Strings": { + "訓練": "This report is for drilling.", + "試験": "This report is for experiment." + } + }, + "Title": { + "Strings": { + "": "report", + "北海é“ãƒ»ä¸‰é™¸æ²–å¾Œç™ºåœ°éœ‡æ³¨æ„æƒ…å ±": "Hokkaido and off-Sanriku aftershock notice", + "å—æµ·ãƒˆãƒ©ãƒ•地震ã«é–¢é€£ã™ã‚‹æƒ…å ±": "Information related to Nankai Trough earthquake", + "å™´ç«ã«é–¢ã™ã‚‹ç«å±±è¦³æ¸¬å ±": "Volcano observation information about eruption", + "å™´ç«è­¦å ±ãƒ»äºˆå ±": "Vocanic warning and forecast", + "å™´ç«é€Ÿå ±": "Volcanic eruption notice", + "åœ°éœ‡ã®æ´»å‹•状æ³ç­‰ã«é–¢ã™ã‚‹æƒ…å ±": "Earthquake activity information", + "地震回数情報": "Earthquake count information", + "地震情報": "Earthquake and seismic intensity information", + "推定噴煙æµå‘å ±": "Estimated plume direction information", + "津波情報": "Tsunami information", + "津波警報・注æ„報・予報": "Tsunami warning, advisory, and forecast", + "ç«å±±ã®çжæ³ã«é–¢ã™ã‚‹è§£èª¬æƒ…å ±": "Explanatory information on volcano status", + "長周期地震動ã«é–¢ã™ã‚‹è¦³æ¸¬æƒ…å ±": "Long period ground motion observation information", + "é™ç°äºˆå ±": "Volcanic ash fall forecast", + "震度速報": "Seismic intensity information", + "震æºè¦ç´ æ›´æ–°ã®ãŠçŸ¥ã‚‰ã›": "Significant earthquake hypocenter update notice", + "震æºé€Ÿå ±": "Earthquake information" + } + }, + "TsunamiForecastCategory": { + "Strings": { + "51": "Tsunami Warning", + "52": "Major Tsunami Warning", + "53": "Major Tsunami Warning", + "62": "Tsunami Advisory", + "71": "Tsunami Forecast (slight sea-level changes)", + "72": "Tsunami Forecast (slight sea-level changes)", + "73": "Tsunami Forecast (slight sea-level changes)" + } + }, + "TsunamiForecastFirstHeightCondition": { + "Strings": { + "ãŸã ã¡ã«æ´¥æ³¢æ¥è¥²ã¨äºˆæ¸¬": "Imminent tsunami arrival expected", + "æ—¢ã«æ´¥æ³¢åˆ°é”ã¨æŽ¨æ¸¬": "Tsunami already arrived estimated", + "津波到é”ä¸­ã¨æŽ¨æ¸¬": "Tsunami arrival expected", + "第1波ã®åˆ°é”を確èª": "Arrival of initial tsunami confirmed" + } + }, + "TsunamiObservationMaxHeightCondition": { + "Strings": { + "微弱": "Slight", + "欠測": "Data missing", + "観測中": "Information pending" + } + }, + "VolcanicWarning": { + "Strings": { + "11": "Level 1 (Potential for increased activity)", + "12": "Level 2 (Restriction on proximity to the crater)", + "13": "Level 3 (Restriction on proximity to the volcano)", + "14": "Level 4 (Evacuation of the elderly, etc.)", + "15": "Level 5 (Evacuation)", + "21": "Potential for increased activity", + "22": "Caution advised around the crater", + "23": "Caution in non-residential areas near the crater", + "24": "Extreme caution advised at the foot of mountains concerned", + "25": "Extreme caution advised in residential areas", + "31": "Volcanic Marine Warning (Volcanic Warning)", + "32": "Volcanic Marine Warning (Volcanic Warning lifted)", + "33": "Volcanic Marine Forecast (Volcanic Forecast)", + "35": "Potential for increased activity (Submarine volcano)", + "36": "Caution advised for the sea area in the vicinity of the volcano", + "51": "explosively erupted", + "52": "erupted", + "53": "started erupting", + "54": "is erupting continuously", + "55": "stopped erupting continuously", + "56": "is actively erupting", + "61": "appeared explosively erupted", + "62": "appeared erupted", + "63": "appeared to start erupting", + "64": "appeared to be erupting continuously", + "65": "appeared to stop erupting", + "70": "ash fall", + "71": "light ash fall", + "72": "moderate ash fall", + "73": "heavy ash fall", + "75": "falling debris" + } + }, + "VolcanoObservationPlumeHeightAboveCraterValue": { + "Strings": { + "": "{0} meters", + "上昇中": "{0} meters (rising)", + "以上": "over {0} meters", + "雲ã«å…¥ã‚‹": "{0} meters (entering clouds)" + } + }, + "WindDegreeValue": { + "Strings": { + "": "{0}", + "䏿˜Ž": "unknown" + } + }, + "WindSpeedValue": { + "Strings": { + "": "{0} knots", + "䏿˜Ž": "unknown" + } + } + } +} \ No newline at end of file diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.JMAAtom.TTS/en.json.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.JMAAtom.TTS/en.json.meta new file mode 100644 index 0000000..f2fe077 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.JMAAtom.TTS/en.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: fc22f1351422a7940be32dd1b086623c +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.JMAAtom.TTS/und.json b/Assets/StreamingAssets/Messages/Cryville.EEW.JMAAtom.TTS/und.json new file mode 100644 index 0000000..245bc62 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.JMAAtom.TTS/und.json @@ -0,0 +1,97 @@ +{ + "Culture": "ja-JP", + "Strings": { + "AshInfo": "{0:HH}時ã‹ã‚‰{1:HH}時ã¾ã§ã€ç«å£ã‹ã‚‰{2}", + "AshInfoItem": "{0}{1}キロメートルã«{2}", + "EarthquakeCount": "{0:dæ—¥HH時}ã‹ã‚‰ã€{1:dæ—¥HH時}ã¾ã§{2}ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚", + "EarthquakeCountFeltNumber": "ã€{0}å›žã®æœ‰æ„Ÿåœ°éœ‡", + "EarthquakeCountNumber": "ã€{0}回ã®åœ°éœ‡", + "EarthquakeCountTotal": "ã¾ã¨ã‚ã¦ã€{0}", + "EarthquakeHypocenterArea": "震æºåœ°ã¯{0}。", + "EarthquakeHypocenterDepth": "震æºã®æ·±ã•ã¯ç´„{0}キロメートル。", + "EarthquakeHypocenterDepth0": "震æºã®æ·±ã•ã¯ã”ãæµ…ã„。", + "EarthquakeHypocenterDepthUnknown": "震æºã®æ·±ã•䏿˜Žã€‚", + "EarthquakeMagnitude": "地震ã®è¦æ¨¡ã‚’示ã™ãƒžã‚°ãƒ‹ãƒãƒ¥ãƒ¼ãƒ‰ã¯ã€{0:F1}ã¨ã€æŽ¨å®šã•れã¦ã„ã¾ã™ã€‚", + "EarthquakeMultiple": "本情報ã®ç™ºè¡¨ã¯ã€è¤‡æ•°ã®åœ°éœ‡ãŒåŽŸå› ã§ã™ã€‚", + "EarthquakeMultipleIndex": "地震{0}", + "Intensity": "震度", + "IntensityObservation": "ã“ã®åœ°éœ‡ã§ã€", + "IntensityObservationArea": "{0}{1}ã‚’ã€{2}ã€ã§è¦³æ¸¬ã—ã¾ã—ãŸã€‚", + "IntensityObservationMax": "ã“ã®åœ°éœ‡ã§ã€æœ€å¤§éœ‡åº¦{0}を観測ã—ã¾ã—ãŸã€‚", + "LongIntensity": "長周期地震動階級", + "LongIntensityObservationMax": "ã“ã®åœ°éœ‡ã§ã€æœ€å¤§é•·å‘¨æœŸåœ°éœ‡å‹•階級{0}を観測ã—ã¾ã—ãŸã€‚", + "Maximum": "最大{0}", + "MinorItemSeparator": "ã€", + "PlumeDirectionValue": "{0}æ–¹å‘", + "TsunamiForecast": "{0}ãŒã€æ¬¡ã®åœ°åŸŸã«ç™ºè¡¨ã•れã¦ã„ã¾ã™ã€‚", + "TsunamiForecastArea": "{0}。{1}。", + "TsunamiForecastFirstHeightArrivalTime": "到é”予想時刻{0:t}", + "TsunamiForecastMaxHeight": "予想ã•れる津波ã®é«˜ã•ã¯ã€{0}ã§ã™ã€‚", + "TsunamiForecastSuffix": "震æºã«é–¢ã™ã‚‹æƒ…å ±", + "TsunamiHeightValue": "{0}メートル", + "TsunamiHeightValueAffix": "{0}", + "TsunamiHeightValueAffixBelow": "{0}未満", + "TsunamiHeightValueAffixOver": "{0}以上", + "TsunamiObservationMaxHeightRising": "上昇中。", + "TsunamiObservationStation": "{0}。{1}。{2}。", + "TsunamiObservationStationNoArea": "{0}。{1}。", + "VolcanoObservationColorPlume": "有色噴煙", + "VolcanoObservationPlume": "{0}ã®è¦³æ¸¬å€¤ã¯æ¬¡ã®é€šã‚Šã§ã™ã€‚", + "VolcanoObservationPlumeDirection": "å™´ç…™æµå‘ã¯{0}æ–¹å‘ã¨è¦³æ¸¬ã—ã¾ã—ãŸã€‚", + "VolcanoObservationPlumeDirectionUnknown": "å™´ç…™æµå‘ã¯ä¸æ˜Žã§ã™ã€‚", + "VolcanoObservationPlumeHeightAboveCrater": "ç«å£ä¸Šå™´ç…™é«˜åº¦ã¯{0}。", + "VolcanoObservationPlumeHeightAboveCraterUnknown": "ç«å£ä¸Šå™´ç…™é«˜åº¦ã¯ä¸æ˜Žã§ã™ã€‚", + "VolcanoObservationPlumeNone": "ã“ã®å™´ç«ã«ã‚ˆã‚‹ã€{0}ã¯ã‚りã¾ã›ã‚“。", + "VolcanoObservationWhitePlume": "白色噴煙", + "VolcanoObservationWindAboveCrater": "海抜{0}フィートã§ã¯ã€é¢¨å‘ã¯{1}ã€é¢¨é€Ÿã¯{2}ã¨äºˆæ¸¬ã•れã¦ã„ã¾ã™ã€‚" + }, + "StringSets": { + "EarthquakeMagnitudeUnknown": { + "Strings": { + "": "地震ã®è¦æ¨¡ã‚’示ã™ãƒžã‚°ãƒ‹ãƒãƒ¥ãƒ¼ãƒ‰ã¯ã€ä¸æ˜Žã§ã™ã€‚", + "M8を超ãˆã‚‹å·¨å¤§åœ°éœ‡": "ã“ã®åœ°éœ‡ã¯ã€ï¼­ï¼˜ã‚’è¶…ãˆã‚‹å·¨å¤§åœ°éœ‡ã¨ã€æŽ¨å®šã•れã¦ã„ã¾ã™ã€‚" + } + }, + "PlumeDirection": { + "Strings": { + "æ–¹å‘ä¸å®š": "ä¸å®š", + "ç«å£è¿‘å‚": "è¿‘å‚" + } + }, + "Status": { + "Strings": { + "訓練": "ã“れã¯è¨“ç·´ã§ã™ã€‚", + "試験": "ã“れã¯è©¦é¨“ã§ã™ã€‚" + } + }, + "TsunamiForecastCategory": { + "Strings": { + "51": "津波警報", + "52": "大津波警報", + "53": "大津波警報", + "62": "津波注æ„å ±", + "71": "æ´¥æ³¢äºˆå ±ï¼ˆè‹¥å¹²ã®æµ·é¢å¤‰å‹•)", + "72": "æ´¥æ³¢äºˆå ±ï¼ˆè‹¥å¹²ã®æµ·é¢å¤‰å‹•)", + "73": "æ´¥æ³¢äºˆå ±ï¼ˆè‹¥å¹²ã®æµ·é¢å¤‰å‹•)" + } + }, + "VolcanoObservationPlumeHeightAboveCraterValue": { + "Strings": { + "": "{0}メートル", + "上昇中": "{0}メートル(上昇中)", + "以上": "{0}メートル以上", + "雲ã«å…¥ã‚‹": "{0}メートル(雲ã«å…¥ã‚‹ï¼‰" + } + }, + "WindDegreeValue": { + "Strings": { + "": "{0}" + } + }, + "WindSpeedValue": { + "Strings": { + "": "{0}ノット" + } + } + } +} \ No newline at end of file diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.JMAAtom.TTS/und.json.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.JMAAtom.TTS/und.json.meta new file mode 100644 index 0000000..d805ebf --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.JMAAtom.TTS/und.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 696b6e7176bd6434bbeac1ece2c05db0 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.JMAAtom.TTS/yue.json b/Assets/StreamingAssets/Messages/Cryville.EEW.JMAAtom.TTS/yue.json new file mode 100644 index 0000000..0273270 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.JMAAtom.TTS/yue.json @@ -0,0 +1,270 @@ +{ + "Culture": "yue-HK", + "Strings": { + "AshInfo": "從{0:HH}點到{1:HH}點,ç«å±±å£{2}。", + "AshInfoItem": "{0}{1}公里會有{2}", + "Cancel": "å–æ¶ˆé ­å…ˆç™¼ä½ˆå˜…{0}。", + "EarthquakeCount": "從{0:d號HH點}到{1:d號HH點}{2}。", + "EarthquakeCountFeltNumber": ",有感地震發生{0}次", + "EarthquakeCountNumber": ",地震發生{0}次", + "EarthquakeCountTotal": "åˆè¨ˆï¼š{0}", + "EarthquakeHypocenterArea": "震æºä½æ–¼{0}。", + "EarthquakeHypocenterDepth": "éœ‡æºæ·±åº¦ç´„{0}公里。", + "EarthquakeHypocenterDepth0": "éœ‡æºæ·±åº¦æ¥µæ·ºã€‚", + "EarthquakeHypocenterDepthUnknown": "éœ‡æºæ·±åº¦ä¸æ˜Žã€‚", + "EarthquakeMagnitude": "è¡¨ç¤ºåœ°éœ‡è¦æ¨¡å˜…震級推定為{0:F1}級。", + "EarthquakeMultiple": "å‘¢æ¢è³‡è¨Šä¿‚由於多次地震發表嘅。", + "EarthquakeMultipleIndex": "地震{0}", + "HeadlineAshDetailed": "呢次{0}噴發,é™ç°ç­‰æƒ…æ³å˜…詳細é å ±å¦‚下。", + "HeadlineAshPreliminary": "呢次{0}噴發,é™ç°ç­‰æƒ…æ³å˜…é å ±å¦‚下。", + "HeadlineAshScheduled": "如果{0}å™´ç™¼ï¼Œå–ºå„æ™‚段嘅é™ç°ç­‰æƒ…æ³é å ±å¦‚下。", + "HeadlineEarthquake": "{0:d號HH:mm},發生咗一次地震。", + "HeadlineEruption": "{0:d號HH:mm},{1}{2}。", + "HeadlineIntensity": "{0:d號HH:mm}ï¼Œæ„ŸçŸ¥åˆ°ç”±åœ°éœ‡å¸¶åšŸå˜…å¼·çƒˆæ–æ™ƒã€‚", + "HeadlinePlume": "呢次{0}噴發,噴煙嘅æµå‘推定如下。", + "HeadlineTsunamiInformationForecast": "å„åœ°å˜…æ»¿æ½®æ™‚åˆ»åŒæµ·å˜¯åˆ°é”é æ¸¬æ™‚刻如下。", + "HeadlineTsunamiInformationObservation": "ç›®å‰ï¼Œæµ·å˜¯å˜…觀測值如下。", + "HeadlineTsunamiWarning": "{0}已被發佈。", + "HeadlineTsunamiWarningLifted": "{0}已被解除。", + "HeadlineTsunamiWarningUpdate": "而家發佈緊嘅{0}已被更新。", + "Intensity": "震度", + "IntensityObservation": "呢次地震,", + "IntensityObservationArea": "觀測到{0}{1}å˜…åœ°å€æœ‰ï¼š{2}。", + "IntensityObservationMax": "呢次地震,觀測到嘅最大震度為{0}。", + "LongIntensity": "長週期地震動階級", + "LongIntensityObservationMax": "呢次地震,觀測到嘅最大長週期地震動階級為{0}。", + "Maximum": "最大{0}", + "MinorItemSeparator": "ï¼›", + "PlumeDirectionValue": "{0}æ–¹å‘", + "TsunamiForecast": "以下嘅å€åŸŸæ­£åœ¨ç™¼ä½ˆ{0}。", + "TsunamiForecastArea": "{0}。{1}。", + "TsunamiForecastFirstHeightArrivalTime": "é æ¸¬åˆ°é”時刻{0:t}", + "TsunamiForecastMaxHeight": "é æ¸¬æµ·å˜¯é«˜åº¦ç‚º{0}。", + "TsunamiForecastSuffix": "關於震æºå˜…資訊", + "TsunamiHeightValue": "{0}ç±³", + "TsunamiHeightValueAffix": "{0}", + "TsunamiHeightValueAffixBelow": "䏿»¿{0}", + "TsunamiHeightValueAffixOver": "{0}以上", + "TsunamiObservationMaxHeightRising": "上å‡ä¸­ã€‚", + "TsunamiObservationStation": "{0}。{1}。{2}。", + "TsunamiObservationStationNoArea": "{0}。{1}。", + "VolcanoObservationColorPlume": "有色噴煙", + "VolcanoObservationPlume": "{0}嘅觀測值如下。", + "VolcanoObservationPlumeDirection": "觀測到嘅噴煙æµå‘為{0}æ–¹å‘。", + "VolcanoObservationPlumeDirectionUnknown": "å™´ç…™æµå‘䏿˜Žã€‚", + "VolcanoObservationPlumeHeightAboveCrater": "ç«å±±å£ä¸Šæ–¹å™´ç…™é«˜åº¦ç‚º{0}。", + "VolcanoObservationPlumeHeightAboveCraterUnknown": "ç«å±±å£ä¸Šæ–¹å™´ç…™é«˜åº¦ä¸æ˜Žã€‚", + "VolcanoObservationPlumeNone": "呢次噴發冇{0}。", + "VolcanoObservationWhitePlume": "白色噴煙", + "VolcanoObservationWindAboveCrater": "喺海拔{0}è‹±å°ºé«˜åº¦ï¼Œé æ¸¬å˜…風å‘為{1},風速為{2}。" + }, + "StringSets": { + "AdditionalCommentEarthquake": { + "Strings": { + "0101": "後續å¯èƒ½æœƒæœ‰è‹¥å¹²å˜…æµ·é¢è®Šå‹•。", + "0102": "後續å¯èƒ½æœƒæœ‰è‹¥å¹²å˜…æµ·é¢è®Šå‹•,但無需擔心å—ç½ã€‚", + "0103": "æµ·é¢è®Šå‹•å¯èƒ½æœƒæŒçºŒä¸€æ®µæ™‚間。", + "0104": "æµ·é¢è®Šå‹•å¯èƒ½æœƒæŒçºŒä¸€æ®µæ™‚間,進行海水浴或海濱垂釣時請注æ„安全。", + "0105": "æµ·é¢è®Šå‹•å¯èƒ½æœƒæŒçºŒä¸€æ®µæ™‚間,進行海濱垂釣時請注æ„安全。", + "0107": "è€Œå®¶å†‡ç™¼ä½ˆå¤§æµ·å˜¯è­¦å ±ã€æµ·å˜¯è­¦å ±æˆ–海嘯注æ„報嘅沿海地å€ã€‚", + "0109": "ç•¶æµ·å˜¯åŒæ¼²æ½®é‡ç–Šæ™‚,海嘯波浪會變得更高,請æé«˜è­¦è¦ºåš´åŠ é˜²ç¯„ã€‚", + "0110": "ç•¶æµ·å˜¯åŒæ¼²æ½®é‡ç–Šæ™‚,海嘯波浪會變得更高,請多加留æ„。", + "0111": "å””åŒåœ°é»žå˜…海嘯有å¯èƒ½é«˜æ–¼è§€æ¸¬åˆ°å˜…海嘯。", + "0112": "後續海嘯波浪å¯èƒ½æœƒè®Šå¾—更高。", + "0113": "根據離岸嘅觀測值推測海嘯嘅沿岸,最快嘅情æ³ä¸‹ï¼ŒæŽ¨æ¸¬æµ·å˜¯å·²ç¶“到é”。", + "0114": "從觀測到海嘯引起嘅潮ä½è®ŠåŒ–到觀測到最大波浪有時需è¦å¹¾å€‹é¾ä»¥ä¸Šã€‚", + "0115": "離岸觀測到嘅海嘯,到沿岸時會變得更高。", + "0121": "大海嘯警報\n巨大嘅海嘯侵襲,將會造æˆåš´é‡å˜…ç½å®³ã€‚\nå¦‚æžœä½æ–¼æµ·å²¸æ²¿å²¸åœ°å€åŒæ²¿æ²³å…©å²¸ç­‰ï¼Œè«‹ç«‹å³æ’¤é›¢åˆ°é«˜åœ°æˆ–者é¿é›£å¤§æ¨“等安全場所é¿é›£ã€‚\n海嘯會å復來襲。警報解除之å‰è«‹å””好離開安全場所。", + "0122": "海嘯警報\n海嘯將會引起ç½å®³ã€‚\nå¦‚æžœä½æ–¼æµ·å²¸æ²¿å²¸åœ°å€åŒæ²¿æ²³å…©å²¸ç­‰ï¼Œè«‹ç«‹å³æ’¤é›¢åˆ°é«˜åœ°æˆ–者é¿é›£å¤§æ¨“等安全場所é¿é›£ã€‚\n海嘯會å復來襲。警報解除之å‰è«‹å””好離開安全場所。", + "0123": "海嘯注æ„å ±\næµ·ä¸ŠåŒæµ·å²¸é™„近等地方å±éšªã€‚\nå¦‚æžœä½æ–¼æµ·ä¸Šï¼Œè«‹å³åˆ»ä¸Šå²¸ä¸¦é é›¢æµ·å²¸ã€‚\n由於潮水嘅æµå‹•æœƒè®Šå¾—æ¹æ€¥ï¼Œæ³¨æ„報解除之å‰è«‹å””好入海或é è¿‘海岸。", + "0124": "海嘯é å ±ï¼ˆè‹¥å¹²å˜…æµ·é¢è®Šå‹•)\né è¨ˆå°‡æœ‰è‹¥å¹²æµ·é¢è®Šå‹•,但無需擔心å—ç½ã€‚", + "0131": "å¦‚æžœä½æ–¼è¢«ç™¼ä½ˆè­¦å ±å˜…海岸沿岸地å€åŒæ²¿æ²³å…©å²¸ç­‰ï¼Œè«‹ç«‹å³æ’¤é›¢åˆ°é«˜åœ°æˆ–者é¿é›£å¤§æ¨“等安全場所é¿é›£ã€‚\né æ¸¬åˆ°é”時刻係指該é å ±å€å†…,海嘯到é”嘅最早時間。根據唔åŒå˜…ä½ç½®ï¼Œåˆ°é”時刻有å¯èƒ½æ¯”é æ¸¬æ™‚刻é²ã€‚\nç”±æ–¼å¾žé æ¸¬åˆ°é”時刻開始直到é”到最高高度有å¯èƒ½éœ€è¦å¹¾å€‹é¾ä»¥ä¸Šï¼Œç„¡è«–ç›®å‰æ‰€è§€æ¸¬åˆ°æµ·å˜¯é«˜åº¦é»žæ¨£ï¼Œåˆ°è­¦å ±è§£é™¤ä¹‹å‰è«‹å””好離開安全場所。", + "0132": "å””åŒåœ°é»žå˜…海嘯高度有å¯èƒ½å¤§æ–¼é æ¸¬å˜…海嘯高度。", + "0141": "æ±æ—¥æœ¬å¤§éœ‡ç½ç´šåˆ¥å˜…海嘯å³å°‡ä¾†è¥²ã€‚", + "0142": "因離岸觀測到高海嘯,切æ›ç‚ºå¤§æµ·å˜¯è­¦å ±ã€æµ·å˜¯è­¦å ±ã€‚", + "0143": "å› é›¢å²¸è§€æ¸¬åˆ°é«˜æµ·å˜¯ï¼Œæ›´æ–°å¤§æµ·å˜¯è­¦å ±ã€æµ·å˜¯è­¦å ±ã€‚", + "0144": "因離岸觀測到高海嘯,切æ›ç‚ºå¤§æµ·å˜¯è­¦å ±ã€‚", + "0145": "因離岸觀測到高海嘯,更新大海嘯警報。", + "0146": "因離岸觀測到高海嘯,切æ›ç‚ºæµ·å˜¯è­¦å ±ã€‚", + "0147": "因離岸觀測到高海嘯,更新海嘯警報。", + "0148": "å› é›¢å²¸è§€æ¸¬åˆ°é«˜æµ·å˜¯ï¼Œæ›´æ–°é æ¸¬æµ·å˜¯é«˜åº¦ã€‚", + "0149": "è«‹å³åˆ»é¿é›£ã€‚", + "0150": "æ­£åœ¨ç™¼ä½ˆå—æµ·æµ·æ§½åœ°éœ‡è‡¨æ™‚資訊。", + "0201": "è«‹è­¦æˆ’å¼·çƒˆæ–æ™ƒã€‚", + "0211": "æ­£åœ¨ç™¼ä½ˆæµ·å˜¯è­¦å ±ç­‰ï¼ˆå¤§æµ·å˜¯è­¦å ±ã€æµ·å˜¯è­¦å ±æˆ–海嘯注æ„報)。", + "0212": "本次地震å¯èƒ½æœƒå¼•起日本沿岸若干海é¢è®Šå‹•,但無需擔心å—ç½ã€‚", + "0213": "æµ·é¢è®Šå‹•å¯èƒ½æœƒæŒçºŒä¸€æ®µæ™‚間,進行海水浴或海濱垂釣時請注æ„安全。", + "0214": "æµ·é¢è®Šå‹•å¯èƒ½æœƒæŒçºŒä¸€æ®µæ™‚間,進行海濱垂釣時請注æ„安全。", + "0215": "無需擔心本次地震引起海嘯。", + "0216": "震æºä½æ–¼æµ·åº•嘅情æ³ä¸‹ï¼Œå¯èƒ½æœƒæœ‰æµ·å˜¯ç™¼ç”Ÿã€‚", + "0217": "請注æ„後續嘅資訊。", + "0221": "太平洋嘅廣大å€åŸŸå¯èƒ½ç™¼ç”Ÿæµ·å˜¯ã€‚", + "0222": "太平洋å¯èƒ½ç™¼ç”Ÿæµ·å˜¯ã€‚", + "0223": "西北太平洋å¯èƒ½ç™¼ç”Ÿæµ·å˜¯ã€‚", + "0224": "å°åº¦æ´‹å˜…廣大å€åŸŸå¯èƒ½ç™¼ç”Ÿæµ·å˜¯ã€‚", + "0225": "å°åº¦æ´‹å¯èƒ½ç™¼ç”Ÿæµ·å˜¯ã€‚", + "0226": "震æºé™„è¿‘å¯èƒ½ç™¼ç”Ÿæµ·å˜¯ã€‚", + "0227": "震æºé™„è¿‘å¯èƒ½ç™¼ç”Ÿç´°å˜…海嘯,但無需擔心發生造æˆå—ç½å˜…海嘯。", + "0228": "一般嚟講,如果喺淺海å€åŸŸç™¼ç”Ÿå‘¢ç¨®è¦æ¨¡å˜…地震,有時會發生海嘯。", + "0229": "æ­£åœ¨èª¿æŸ¥æœ‰å†‡æµ·å˜¯æ³¢åŠæ—¥æœ¬ã€‚", + "0230": "å‘¢æ¬¡åœ°éœ‡å†‡å¼•ç™¼æµ·å˜¯æ³¢åŠæ—¥æœ¬å˜…影響。", + "0241": "已發佈呢次地震相關嘅緊急地震速報。", + "0242": "已發佈呢次地震相關嘅緊急地震速報。呢次地震嘅最大烈度為2。", + "0243": "已發佈呢次地震相關嘅緊急地震速報。呢次地震嘅最大烈度為1。", + "0244": "已發佈呢次地震相關嘅緊急地震速報。冇監測到呢次地震烈度超éŽ1。", + "0245": "å·²ç™¼ä½ˆå‘¢æ¬¡åœ°éœ‡ç›¸é—œå˜…ç·Šæ€¥åœ°éœ‡é€Ÿå ±ï¼Œä½†æœªç›£æ¸¬åˆ°å¼·çƒˆæ–æ™ƒã€‚", + "0256": "訂正震æºè¦ç´ ã€‚" + } + }, + "EarthquakeMagnitudeUnknown": { + "Strings": { + "": "åœ°éœ‡å˜…è¦æ¨¡ä¸æ˜Žã€‚", + "M8を超ãˆã‚‹å·¨å¤§åœ°éœ‡": "推定呢次地震係震級大於8嘅巨大地震。" + } + }, + "HeadlineVolcanoWarning": { + "Strings": { + "": "ç•¶å‰ï¼Œ{0}ä¿‚ç«å±±å™´ç™¼è­¦æˆ’{2}。", + "引上ã’": "{0}嘅ç«å±±å™´ç™¼è­¦æˆ’{1}上調到{2}。", + "引下ã’": "{0}嘅ç«å±±å™´ç™¼è­¦æˆ’{1}下調到{2}。" + } + }, + "NankaiTroughInfo": { + "Strings": { + "111": "å—æµ·æµ·æ§½åœ°éœ‡å˜…監視å€åŸŸå…§ç™¼ç”Ÿå’—è¦æ¨¡6.8或以上嘅地震。\næ°£è±¡å»³å·²ç¶“é–‹å§‹èª¿æŸ¥å‘¢æ¬¡ç™¼ç”Ÿå˜…åœ°éœ‡èˆ‡å—æµ·æµ·æ§½åœ°éœ‡å˜…é—œè¯æ€§ï¼Œä¸¦èˆ‰è¾¦é—œæ–¼æ²¿å—海海槽地震嘅評估檢討會。\nè‹¥ä½æ–¼å—æµ·æµ·æ§½åœ°éœ‡å˜…é æƒ³å—ç½åœ°å€ï¼Œè«‹æ ¹æ“šå„自嘅情æ³ï¼ŒæŽ¡å–行動ä¿è­·è‡ªèº«å®‰å…¨ã€‚", + "112": "應變觀測點觀測到咗顯著嘅變化,且變化正在增大。\n氣象廳已經開始調查觀測到嘅ç¾è±¡èˆ‡å—æµ·æµ·æ§½åœ°éœ‡å˜…é—œè¯æ€§ï¼Œä¸¦èˆ‰è¾¦é—œæ–¼æ²¿å—海海槽地震嘅評估檢討會。\nè‹¥ä½æ–¼å—æµ·æµ·æ§½åœ°éœ‡å˜…é æƒ³å—ç½åœ°å€ï¼Œè«‹æ³¨æ„後續嘅資訊。", + "113": "觀測到咗å¯èƒ½è¡¨æ˜Žé æƒ³éœ‡æºåŸŸå…§å˜…æ¿å¡Šé‚Šç•Œå˜…固著狀態發生變化嘅ç¾è±¡ã€‚\n氣象廳已經開始調查觀測到嘅ç¾è±¡èˆ‡å—æµ·æµ·æ§½åœ°éœ‡å˜…é—œè¯æ€§ï¼Œä¸¦èˆ‰è¾¦é—œæ–¼æ²¿å—海海槽地震嘅評估檢討會。\nè‹¥ä½æ–¼å—æµ·æµ·æ§½åœ°éœ‡å˜…é æƒ³å—ç½åœ°å€ï¼Œè«‹æ³¨æ„後續嘅資訊。", + "120": "æ°£è±¡å»³è‡¨æ™‚èˆ‰è¾¦å’—é—œæ–¼æ²¿å—æµ·æµ·æ§½åœ°éœ‡å˜…評估檢討會。評估èªç‚ºï¼Œç”±æ–¼æœ¬æ¬¡åœ°éœ‡å˜…矩震級為8.0或以上,包括唔係呢次地震嘅震æºåŸŸå˜…å€åŸŸåœ¨å…§ï¼Œå—æµ·æµ·æ§½åœ°éœ‡å˜…é æƒ³éœ‡æºåŸŸå…§ï¼Œå¤§è¦æ¨¡åœ°éœ‡ç™¼ç”Ÿå˜…å¯èƒ½æ€§èˆ‡å¹³å¸¸ç›¸æ¯”相å°è¼ƒé«˜ã€‚\n請根據政府åŒè‡ªæ²»é«”等後續嘅呼籲等採å–é˜²ç½æŽªæ–½ã€‚\næ°£è±¡å»³å°‡ç¹¼çºŒå¯†åˆ‡ç›£è¦–æ²¿å—æµ·æµ·æ§½åœ°æ®¼æ´»å‹•嘅推移。", + "130": "æ°£è±¡å»³è‡¨æ™‚èˆ‰è¾¦å’—é—œæ–¼æ²¿å—æµ·æµ·æ§½åœ°éœ‡å˜…評估檢討會。評估èªç‚ºï¼Œå—æµ·æµ·æ§½åœ°éœ‡å˜…é æƒ³éœ‡æºåŸŸå…§ï¼Œå¤§è¦æ¨¡åœ°éœ‡ç™¼ç”Ÿå˜…å¯èƒ½æ€§èˆ‡å¹³å¸¸ç›¸æ¯”相å°è¼ƒé«˜ã€‚\n請根據政府åŒè‡ªæ²»é«”等後續嘅呼籲等採å–é˜²ç½æŽªæ–½ã€‚\næ°£è±¡å»³å°‡ç¹¼çºŒå¯†åˆ‡ç›£è¦–æ²¿å—æµ·æµ·æ§½åœ°æ®¼æ´»å‹•嘅推移。", + "190": "æ°£è±¡å»³è‡¨æ™‚èˆ‰è¾¦å’—é—œæ–¼æ²¿å—æµ·æµ·æ§½åœ°éœ‡å˜…評估檢討會。評估èªç‚ºï¼Œå†‡è§€æ¸¬åˆ°å¯ä»¥è¡¨æ˜Žæ²¿å—æµ·æµ·æ§½å˜…å¤§è¦æ¨¡åœ°éœ‡ç™¼ç”Ÿå˜…å¯èƒ½æ€§èˆ‡å¹³å¸¸ç›¸æ¯”相å°è¼ƒé«˜å˜…變化。\næ°£è±¡å»³å°‡ç¹¼çºŒå¯†åˆ‡ç›£è¦–æ²¿å—æµ·æµ·æ§½åœ°æ®¼æ´»å‹•嘅推移。", + "200": "æ°£è±¡å»³èˆ‰è¾¦å’—é—œæ–¼æ²¿å—æµ·æµ·æ§½åœ°éœ‡å˜…評估檢討會。當å‰ï¼Œå†‡è§€æ¸¬åˆ°å¯ä»¥è¡¨æ˜Žæ²¿å—æµ·æµ·æ§½å˜…å¤§è¦æ¨¡åœ°éœ‡ç™¼ç”Ÿå˜…å¯èƒ½æ€§èˆ‡å¹³å¸¸ç›¸æ¯”相å°è¼ƒé«˜å˜…變化。", + "210": "政府正在è½å¯¦å°å—æµ·æµ·æ§½åœ°éœ‡é˜²ç½æŽ¨é€²åœ°å€åšå¥½è­¦æˆ’æˆ–æ³¨æ„æŽªæ–½å˜…å‘¼ç±²ç­‰ã€‚è«‹ç¹¼çºŒæ ¹æ“šæ”¿åºœåŒè‡ªæ²»é«”等後續嘅呼籲等採å–é˜²ç½æŽªæ–½ã€‚\næ°£è±¡å»³å°‡ç¹¼çºŒå¯†åˆ‡ç›£è¦–æ²¿å—æµ·æµ·æ§½åœ°æ®¼æ´»å‹•嘅推移。", + "219": "政府正在è½å¯¦å°å—æµ·æµ·æ§½åœ°éœ‡é˜²ç½æŽ¨é€²åœ°å€åšå¥½è­¦æˆ’æˆ–æ³¨æ„æŽªæ–½å˜…å‘¼ç±²ç­‰ã€‚è«‹ç¹¼çºŒæ ¹æ“šæ”¿åºœåŒè‡ªæ²»é«”等後續嘅呼籲等採å–é˜²ç½æŽªæ–½ã€‚\næ°£è±¡å»³å°‡ç¹¼çºŒå¯†åˆ‡ç›£è¦–æ²¿å—æµ·æµ·æ§½åœ°æ®¼æ´»å‹•嘅推移。" + } + }, + "PlumeDirection": { + "Strings": { + "北": "北", + "北æ±": "æ±åŒ—", + "北西": "西北", + "å—": "å—", + "å—æ±": "æ±å—", + "å—西": "西å—", + "æ–¹å‘ä¸å®š": "ä¸å®š", + "æ±": "æ±", + "ç«å£è¿‘å‚": "è¿‘å‚", + "直上": "直上", + "西": "西" + } + }, + "Status": { + "Strings": { + "訓練": "呢報係訓練報。", + "試験": "呢報係試驗報。" + } + }, + "Title": { + "Strings": { + "": "電文", + "北海é“ãƒ»ä¸‰é™¸æ²–å¾Œç™ºåœ°éœ‡æ³¨æ„æƒ…å ±": "北海é“ã€ä¸‰é™¸å¤–海餘震注æ„資訊", + "å—æµ·ãƒˆãƒ©ãƒ•地震ã«é–¢é€£ã™ã‚‹æƒ…å ±": "é—œæ–¼å—æµ·æµ·æ§½åœ°éœ‡å˜…資訊", + "å™´ç«ã«é–¢ã™ã‚‹ç«å±±è¦³æ¸¬å ±": "關於ç«å±±å™´ç™¼å˜…ç«å±±è§€æ¸¬å ±", + "å™´ç«è­¦å ±ãƒ»äºˆå ±": "ç«å±±å™´ç™¼è­¦å ±ã€é å ±", + "å™´ç«é€Ÿå ±": "ç«å±±å™´ç™¼é€Ÿå ±", + "åœ°éœ‡ã®æ´»å‹•状æ³ç­‰ã«é–¢ã™ã‚‹æƒ…å ±": "關於地震嘅活動狀æ³ç­‰å˜…資訊", + "地震回数情報": "地震次數資訊", + "地震情報": "地震資訊", + "推定噴煙æµå‘å ±": "推定噴煙æµå‘å ±", + "津波情報": "海嘯資訊", + "津波警報・注æ„報・予報": "æµ·å˜¯è­¦å ±ã€æ³¨æ„å ±ã€é å ±", + "ç«å±±ã®çжæ³ã«é–¢ã™ã‚‹è§£èª¬æƒ…å ±": "關於ç«å±±å˜…ç‹€æ³å˜…解説資訊", + "長周期地震動ã«é–¢ã™ã‚‹è¦³æ¸¬æƒ…å ±": "關於長週期地震動嘅觀測資訊", + "é™ç°äºˆå ±": "é™ç°é å ±", + "震度速報": "震度速報", + "震æºè¦ç´ æ›´æ–°ã®ãŠçŸ¥ã‚‰ã›": "震æºè¦ç´ æ›´æ–°é€šçŸ¥", + "震æºé€Ÿå ±": "震æºé€Ÿå ±" + } + }, + "TsunamiForecastCategory": { + "Strings": { + "51": "海嘯警報", + "52": "大海嘯警報", + "53": "大海嘯警報", + "62": "海嘯注æ„å ±", + "71": "海嘯é å ±ï¼ˆè‹¥å¹²å˜…æµ·é¢è®Šå‹•)", + "72": "海嘯é å ±ï¼ˆè‹¥å¹²å˜…æµ·é¢è®Šå‹•)", + "73": "海嘯é å ±ï¼ˆè‹¥å¹²å˜…æµ·é¢è®Šå‹•)" + } + }, + "TsunamiForecastFirstHeightCondition": { + "Strings": { + "ãŸã ã¡ã«æ´¥æ³¢æ¥è¥²ã¨äºˆæ¸¬": "é æ¸¬æµ·å˜¯å³å°‡åˆ°é”", + "æ—¢ã«æ´¥æ³¢åˆ°é”ã¨æŽ¨æ¸¬": "推測海嘯已經到é”", + "津波到é”ä¸­ã¨æŽ¨æ¸¬": "推測海嘯正在到é”", + "第1波ã®åˆ°é”を確èª": "第一波已確èªåˆ°é”" + } + }, + "TsunamiObservationMaxHeightCondition": { + "Strings": { + "微弱": "微弱", + "欠測": "缺失數據", + "観測中": "觀測中" + } + }, + "VolcanicWarning": { + "Strings": { + "11": "等級1(活ç«å±±ç•™æ„)", + "12": "等級2(ç«å±±å£é€±é‚Šç®¡åˆ¶ï¼‰", + "13": "等級3(入山管制)", + "14": "等級4(è€å¹´äººç­‰é¿é›£ï¼‰", + "15": "等級5(é¿é›£ï¼‰", + "21": "æ´»ç«å±±ç•™æ„", + "22": "ç«å±±å£é€±é‚Šå±éšª", + "23": "入山å±éšª", + "24": "山麓嚴é‡è­¦æˆ’", + "25": "å±…ä½å€åŸŸåš´é‡è­¦æˆ’", + "31": "海上警報(ç«å±±å™´ç™¼è­¦å ±ï¼‰", + "32": "海上警報(ç«å±±å™´ç™¼è­¦å ±è§£é™¤ï¼‰", + "33": "海上é å ±ï¼ˆç«å±±å™´ç™¼é å ±ï¼‰", + "35": "æ´»ç«å±±ç•™æ„(海底ç«å±±ï¼‰", + "36": "週邊海域警戒", + "51": "爆發", + "52": "噴發", + "53": "開始噴發", + "54": "æŒçºŒé€£çºŒå™´ç™¼", + "55": "åœæ­¢é€£çºŒå™´ç™¼", + "56": "噴發多發", + "61": "似乎已經爆發", + "62": "似乎已經噴發", + "63": "似乎已經開始噴發", + "64": "似乎正在æŒçºŒé€£çºŒå™´ç™¼", + "65": "ä¼¼ä¹Žå·²ç¶“åœæ­¢é€£çºŒå™´ç™¼", + "70": "é™ç°", + "71": "å°‘é‡é™ç°", + "72": "較多é™ç°", + "73": "大é‡é™ç°", + "75": "å°åž‹å™´çŸ³è½ä¸‹" + } + }, + "VolcanoObservationPlumeHeightAboveCraterValue": { + "Strings": { + "": "{0}ç±³", + "上昇中": "{0}米(上å‡ä¸­ï¼‰", + "以上": "{0}米以上", + "雲ã«å…¥ã‚‹": "{0}米(進入雲層)" + } + }, + "WindDegreeValue": { + "Strings": { + "": "{0}", + "䏿˜Ž": "䏿˜Ž" + } + }, + "WindSpeedValue": { + "Strings": { + "": "{0}節", + "䏿˜Ž": "䏿˜Ž" + } + } + } +} \ No newline at end of file diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.JMAAtom.TTS/yue.json.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.JMAAtom.TTS/yue.json.meta new file mode 100644 index 0000000..f74418c --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.JMAAtom.TTS/yue.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 5a0751990f6e14648bce377c3aa7c3b0 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.JMAAtom.TTS/zh-Hant.json b/Assets/StreamingAssets/Messages/Cryville.EEW.JMAAtom.TTS/zh-Hant.json new file mode 100644 index 0000000..83b5e9e --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.JMAAtom.TTS/zh-Hant.json @@ -0,0 +1,270 @@ +{ + "Culture": "zh-TW", + "Strings": { + "AshInfo": "從{0:HH}時到{1:HH}時,ç«å±±å£{2}。", + "AshInfoItem": "{0}{1}公里會有{2}", + "Cancel": "å–æ¶ˆå‰›æ‰ç™¼ä½ˆçš„{0}。", + "EarthquakeCount": "從{0:dæ—¥HH時}到{1:dæ—¥HH時}{2}。", + "EarthquakeCountFeltNumber": ",有感地震發生{0}次", + "EarthquakeCountNumber": ",地震發生{0}次", + "EarthquakeCountTotal": "åˆè¨ˆï¼š{0}", + "EarthquakeHypocenterArea": "震æºä½æ–¼{0}。", + "EarthquakeHypocenterDepth": "éœ‡æºæ·±åº¦ç´„{0}公里。", + "EarthquakeHypocenterDepth0": "éœ‡æºæ·±åº¦ç‚ºæ¥µæ·ºã€‚", + "EarthquakeHypocenterDepthUnknown": "éœ‡æºæ·±åº¦ä¸æ˜Žã€‚", + "EarthquakeMagnitude": "è¡¨ç¤ºåœ°éœ‡è¦æ¨¡çš„震級推定為{0:F1}級。", + "EarthquakeMultiple": "本資訊是由於多次地震而發表的。", + "EarthquakeMultipleIndex": "地震{0}", + "HeadlineAshDetailed": "此次{0}噴發,é™ç°ç­‰æƒ…æ³çš„詳細é å ±å¦‚下。", + "HeadlineAshPreliminary": "此次{0}噴發,é™ç°ç­‰æƒ…æ³çš„é å ±å¦‚下。", + "HeadlineAshScheduled": "如果{0}å™´ç™¼ï¼Œåœ¨å„æ™‚段的é™ç°ç­‰æƒ…æ³é å ±å¦‚下。", + "HeadlineEarthquake": "{0:dæ—¥HH:mm},發生了一次地震。", + "HeadlineEruption": "{0:dæ—¥HH:mm},{1}{2}。", + "HeadlineIntensity": "{0:dæ—¥HH:mm}ï¼Œæ„ŸçŸ¥åˆ°ç”±åœ°éœ‡å¸¶ä¾†çš„å¼·çƒˆæ–æ™ƒã€‚", + "HeadlinePlume": "此次{0}噴發,噴煙的æµå‘推定如下。", + "HeadlineTsunamiInformationForecast": "å„地的滿潮時刻和海嘯到é”é æ¸¬æ™‚刻如下。", + "HeadlineTsunamiInformationObservation": "ç›®å‰ï¼Œæµ·å˜¯çš„觀測值如下。", + "HeadlineTsunamiWarning": "{0}已被發佈。", + "HeadlineTsunamiWarningLifted": "{0}已被解除。", + "HeadlineTsunamiWarningUpdate": "ç•¶å‰ç™¼ä½ˆä¸­çš„{0}已被更新。", + "Intensity": "震度", + "IntensityObservation": "本次地震,", + "IntensityObservationArea": "觀測到{0}{1}çš„åœ°å€æœ‰ï¼š{2}。", + "IntensityObservationMax": "本次地震,觀測到的最大震度為{0}。", + "LongIntensity": "長周期地震動階級", + "LongIntensityObservationMax": "本次地震,觀測到的最大長周期地震動階級為{0}。", + "Maximum": "最大{0}", + "MinorItemSeparator": "ï¼›", + "PlumeDirectionValue": "{0}æ–¹å‘", + "TsunamiForecast": "以下的å€åŸŸæ­£åœ¨ç™¼å¸ƒ{0}。", + "TsunamiForecastArea": "{0}。{1}。", + "TsunamiForecastFirstHeightArrivalTime": "é æ¸¬åˆ°é”時刻{0:t}", + "TsunamiForecastMaxHeight": "é æ¸¬æµ·å˜¯é«˜åº¦ç‚º{0}。", + "TsunamiForecastSuffix": "關於震æºçš„資訊", + "TsunamiHeightValue": "{0}公尺", + "TsunamiHeightValueAffix": "{0}", + "TsunamiHeightValueAffixBelow": "䏿»¿{0}", + "TsunamiHeightValueAffixOver": "{0}以上", + "TsunamiObservationMaxHeightRising": "上å‡ä¸­ã€‚", + "TsunamiObservationStation": "{0}。{1}。{2}。", + "TsunamiObservationStationNoArea": "{0}。{1}。", + "VolcanoObservationColorPlume": "有色噴煙", + "VolcanoObservationPlume": "{0}的觀測值如下。", + "VolcanoObservationPlumeDirection": "觀測到的噴煙æµå‘為{0}æ–¹å‘。", + "VolcanoObservationPlumeDirectionUnknown": "å™´ç…™æµå‘䏿˜Žã€‚", + "VolcanoObservationPlumeHeightAboveCrater": "ç«å±±å£ä¸Šæ–¹å™´ç…™é«˜åº¦ç‚º{0}。", + "VolcanoObservationPlumeHeightAboveCraterUnknown": "ç«å±±å£ä¸Šæ–¹å™´ç…™é«˜åº¦ä¸æ˜Žã€‚", + "VolcanoObservationPlumeNone": "本次噴發無{0}。", + "VolcanoObservationWhitePlume": "白色噴煙", + "VolcanoObservationWindAboveCrater": "在海拔{0}è‹±å‘Žé«˜åº¦ï¼Œé æ¸¬çš„風å‘為{1},風速為{2}。" + }, + "StringSets": { + "AdditionalCommentEarthquake": { + "Strings": { + "0101": "後續å¯èƒ½æœƒæœ‰è‹¥å¹²çš„æµ·é¢è®Šå‹•。", + "0102": "後續å¯èƒ½æœƒæœ‰è‹¥å¹²çš„æµ·é¢è®Šå‹•,但無需擔心å—ç½ã€‚", + "0103": "æµ·é¢è®Šå‹•å¯èƒ½æœƒæŒçºŒä¸€æ®µæ™‚間。", + "0104": "æµ·é¢è®Šå‹•å¯èƒ½æœƒæŒçºŒä¸€æ®µæ™‚間,進行海水浴或海濱垂釣時請注æ„安全。", + "0105": "æµ·é¢è®Šå‹•å¯èƒ½æœƒæŒçºŒä¸€æ®µæ™‚間,進行海濱垂釣時請注æ„安全。", + "0107": "ç•¶å‰æ²’æœ‰ç™¼ä½ˆå¤§æµ·å˜¯è­¦å ±ã€æµ·å˜¯è­¦å ±æˆ–海嘯注æ„報的沿海地å€ã€‚", + "0109": "當海嘯和漲潮é‡ç–Šæ™‚,海嘯波浪會變得更高,請æé«˜è­¦è¦ºåš´åŠ é˜²ç¯„ã€‚", + "0110": "當海嘯和漲潮é‡ç–Šæ™‚,海嘯波浪會變得更高,請加以注æ„。", + "0111": "ä¸åŒåœ°é»žçš„æµ·å˜¯æœ‰å¯èƒ½é«˜æ–¼è§€æ¸¬åˆ°çš„æµ·å˜¯ã€‚", + "0112": "後續海嘯波浪å¯èƒ½æœƒè®Šå¾—更高。", + "0113": "根據離岸的觀測值推測海嘯的沿岸,最快的情æ³ä¸‹ï¼ŒæŽ¨æ¸¬æµ·å˜¯å·²ç¶“到é”。", + "0114": "從觀測到海嘯引起的潮ä½è®ŠåŒ–åˆ°è§€æ¸¬åˆ°æœ€å¤§æ³¢æµªæœ‰æ™‚éœ€è¦æ•¸å°æ™‚以上。", + "0115": "離岸觀測到的海嘯,到沿岸時會變得更高。", + "0121": "大海嘯警報\n巨大的海嘯侵襲,將會造æˆåš´é‡çš„ç½å®³ã€‚\nè‹¥ä½æ–¼æµ·å²¸æ²¿å²¸åœ°å€å’Œæ²¿æ²³å…©å²¸ç­‰ï¼Œè«‹ç«‹å³æ’¤é›¢åˆ°é«˜åœ°æˆ–é¿é›£å¤§æ¨“等安全場所é¿é›£ã€‚\n海嘯會å復來襲。警報解除å‰è«‹ä¸è¦é›¢é–‹å®‰å…¨å ´æ‰€ã€‚", + "0122": "海嘯警報\n海嘯將會引起ç½å®³ã€‚\nè‹¥ä½æ–¼æµ·å²¸æ²¿å²¸åœ°å€å’Œæ²¿æ²³å…©å²¸ç­‰ï¼Œè«‹ç«‹å³æ’¤é›¢åˆ°é«˜åœ°æˆ–é¿é›£å¤§æ¨“等安全場所é¿é›£ã€‚\n海嘯會å復來襲。警報解除å‰è«‹ä¸è¦é›¢é–‹å®‰å…¨å ´æ‰€ã€‚", + "0123": "海嘯注æ„å ±\n海上和海岸附近等地方å±éšªã€‚\nè‹¥ä½æ–¼æµ·ä¸Šï¼Œè«‹ç«‹åˆ»ä¸Šå²¸ä¸¦é é›¢æµ·å²¸ã€‚\n由於潮水的æµå‹•æœƒè®Šå¾—æ¹æ€¥ï¼Œæ³¨æ„報解除å‰è«‹ä¸è¦å…¥æµ·æˆ–é è¿‘海岸。", + "0124": "海嘯é å ±ï¼ˆè‹¥å¹²çš„æµ·é¢è®Šå‹•)\né è¨ˆå°‡æœ‰è‹¥å¹²æµ·é¢è®Šå‹•,但無需擔心å—ç½ã€‚", + "0131": "è‹¥ä½æ–¼è¢«ç™¼ä½ˆè­¦å ±çš„æµ·å²¸æ²¿å²¸åœ°å€å’Œæ²¿æ²³å…©å²¸ç­‰ï¼Œè«‹ç«‹å³æ’¤é›¢åˆ°é«˜åœ°æˆ–é¿é›£å¤§æ¨“等安全場所é¿é›£ã€‚\né æ¸¬åˆ°é”時刻是指該é å ±å€å†…,海嘯到é”的最早時間。根據ä¸åŒçš„ä½ç½®ï¼Œåˆ°é”時刻有å¯èƒ½æ™šæ–¼é æ¸¬æ™‚刻。\nç”±æ–¼å¾žé æ¸¬åˆ°é”時刻開始直到é”到最高高度有å¯èƒ½éœ€è¦æ•¸å°æ™‚ä»¥ä¸Šï¼Œç„¡è«–ç›®å‰æ‰€è§€æ¸¬åˆ°æµ·å˜¯é«˜åº¦å¦‚何,到警報解除å‰è«‹ä¸è¦é›¢é–‹å®‰å…¨å ´æ‰€ã€‚", + "0132": "ä¸åŒåœ°é»žçš„æµ·å˜¯é«˜åº¦æœ‰å¯èƒ½å¤§æ–¼é æ¸¬çš„æµ·å˜¯é«˜åº¦ã€‚", + "0141": "æ±æ—¥æœ¬å¤§éœ‡ç½ç´šåˆ¥çš„æµ·å˜¯å³å°‡ä¾†è¥²ã€‚", + "0142": "因離岸觀測到高海嘯,切æ›ç‚ºå¤§æµ·å˜¯è­¦å ±ã€æµ·å˜¯è­¦å ±ã€‚", + "0143": "å› é›¢å²¸è§€æ¸¬åˆ°é«˜æµ·å˜¯ï¼Œæ›´æ–°å¤§æµ·å˜¯è­¦å ±ã€æµ·å˜¯è­¦å ±ã€‚", + "0144": "因離岸觀測到高海嘯,切æ›ç‚ºå¤§æµ·å˜¯è­¦å ±ã€‚", + "0145": "因離岸觀測到高海嘯,更新大海嘯警報。", + "0146": "因離岸觀測到高海嘯,切æ›ç‚ºæµ·å˜¯è­¦å ±ã€‚", + "0147": "因離岸觀測到高海嘯,更新海嘯警報。", + "0148": "å› é›¢å²¸è§€æ¸¬åˆ°é«˜æµ·å˜¯ï¼Œæ›´æ–°é æ¸¬æµ·å˜¯é«˜åº¦ã€‚", + "0149": "è«‹ç«‹å³é¿é›£ã€‚", + "0150": "æ­£åœ¨ç™¼ä½ˆå—æµ·æµ·æ§½åœ°éœ‡è‡¨æ™‚資訊。", + "0201": "è«‹è­¦æˆ’å¼·çƒˆæ–æ™ƒã€‚", + "0211": "æ­£åœ¨ç™¼ä½ˆæµ·å˜¯è­¦å ±ç­‰ï¼ˆå¤§æµ·å˜¯è­¦å ±ã€æµ·å˜¯è­¦å ±æˆ–海嘯注æ„報)。", + "0212": "本次地震å¯èƒ½æœƒå¼•起日本沿岸若干海é¢è®Šå‹•,但無需擔心å—ç½ã€‚", + "0213": "æµ·é¢è®Šå‹•å¯èƒ½æœƒæŒçºŒä¸€æ®µæ™‚間,進行海水浴或海濱垂釣時請注æ„安全。", + "0214": "æµ·é¢è®Šå‹•å¯èƒ½æœƒæŒçºŒä¸€æ®µæ™‚間,進行海濱垂釣時請注æ„安全。", + "0215": "無需擔心本次地震引起海嘯。", + "0216": "震æºä½æ–¼æµ·åº•的情æ³ä¸‹ï¼Œå¯èƒ½æœƒæœ‰æµ·å˜¯ç™¼ç”Ÿã€‚", + "0217": "請注æ„後續的資訊。", + "0221": "太平洋的廣大å€åŸŸå¯èƒ½ç™¼ç”Ÿæµ·å˜¯ã€‚", + "0222": "太平洋å¯èƒ½ç™¼ç”Ÿæµ·å˜¯ã€‚", + "0223": "西北太平洋å¯èƒ½ç™¼ç”Ÿæµ·å˜¯ã€‚", + "0224": "å°åº¦æ´‹çš„廣大å€åŸŸå¯èƒ½ç™¼ç”Ÿæµ·å˜¯ã€‚", + "0225": "å°åº¦æ´‹å¯èƒ½ç™¼ç”Ÿæµ·å˜¯ã€‚", + "0226": "震æºé™„è¿‘å¯èƒ½ç™¼ç”Ÿæµ·å˜¯ã€‚", + "0227": "震æºé™„è¿‘å¯èƒ½ç™¼ç”Ÿå°æµ·å˜¯ï¼Œä½†ç„¡éœ€æ“”心發生造æˆå—ç½çš„æµ·å˜¯ã€‚", + "0228": "一般來說,如果在淺海å€åŸŸç™¼ç”Ÿé€™ç¨®è¦æ¨¡çš„地震,則有時會發生海嘯。", + "0229": "æ­£åœ¨èª¿æŸ¥æœ‰ç„¡æµ·å˜¯æ³¢åŠæ—¥æœ¬ã€‚", + "0230": "è©²åœ°éœ‡æ²’æœ‰å¼•ç™¼æµ·å˜¯æ³¢åŠæ—¥æœ¬çš„影響。", + "0241": "已發佈此地震相關的緊急地震速報。", + "0242": "已發佈此地震相關的緊急地震速報。此地震的最大震度為2。", + "0243": "已發佈此地震相關的緊急地震速報。此地震的最大震度為1。", + "0244": "已發佈此地震相關的緊急地震速報。未監測到此地震震度超éŽ1。", + "0245": "å·²ç™¼ä½ˆæ­¤åœ°éœ‡ç›¸é—œçš„ç·Šæ€¥åœ°éœ‡é€Ÿå ±ï¼Œä½†æœªç›£æ¸¬åˆ°å¼·çƒˆæ–æ™ƒã€‚", + "0256": "訂正震æºè¦ç´ " + } + }, + "EarthquakeMagnitudeUnknown": { + "Strings": { + "": "åœ°éœ‡çš„è¦æ¨¡ä¸æ˜Žã€‚", + "M8を超ãˆã‚‹å·¨å¤§åœ°éœ‡": "推定本次地震為震級大於8的巨大地震" + } + }, + "HeadlineVolcanoWarning": { + "Strings": { + "": "ç•¶å‰ï¼Œ{0}為ç«å±±å™´ç™¼è­¦æˆ’{2}。", + "引上ã’": "{0}çš„ç«å±±å™´ç™¼è­¦æˆ’{1}上調為{2}。", + "引下ã’": "{0}çš„ç«å±±å™´ç™¼è­¦æˆ’{1}下調為{2}。" + } + }, + "NankaiTroughInfo": { + "Strings": { + "111": "å—æµ·æµ·æ§½åœ°éœ‡çš„監視å€åŸŸå…§ç™¼ç”Ÿäº†è¦æ¨¡6.8或以上的地震。\næ°£è±¡å»³å·²ç¶“é–‹å§‹èª¿æŸ¥æœ¬æ¬¡ç™¼ç”Ÿçš„åœ°éœ‡èˆ‡å—æµ·æµ·æ§½åœ°éœ‡çš„é—œè¯æ€§ï¼Œä¸¦èˆ‰è¾¦é—œæ–¼æ²¿å—海海槽地震的評估檢討會。\nè‹¥ä½æ–¼å—æµ·æµ·æ§½åœ°éœ‡çš„é æƒ³å—ç½åœ°å€ï¼Œè«‹æ ¹æ“šå„自的情æ³ï¼ŒæŽ¡å–行動ä¿è­·è‡ªèº«å®‰å…¨ã€‚", + "112": "應變觀測點觀測到了顯著的變化,且變化正在增大。\n氣象廳已經開始調查觀測到的ç¾è±¡èˆ‡å—æµ·æµ·æ§½åœ°éœ‡çš„é—œè¯æ€§ï¼Œä¸¦èˆ‰è¾¦é—œæ–¼æ²¿å—海海槽地震的評估檢討會。\nè‹¥ä½æ–¼å—æµ·æµ·æ§½åœ°éœ‡çš„é æƒ³å—ç½åœ°å€ï¼Œè«‹æ³¨æ„後續的資訊。", + "113": "觀測到了å¯èƒ½è¡¨æ˜Žé æƒ³éœ‡æºåŸŸå…§çš„æ¿å¡Šé‚Šç•Œçš„å›ºè‘—ç‹€æ…‹ç™¼ç”Ÿè®ŠåŒ–çš„ç¾è±¡ã€‚\n氣象廳已經開始調查觀測到的ç¾è±¡èˆ‡å—æµ·æµ·æ§½åœ°éœ‡çš„é—œè¯æ€§ï¼Œä¸¦èˆ‰è¾¦é—œæ–¼æ²¿å—海海槽地震的評估檢討會。\nè‹¥ä½æ–¼å—æµ·æµ·æ§½åœ°éœ‡çš„é æƒ³å—ç½åœ°å€ï¼Œè«‹æ³¨æ„後續的資訊。", + "120": "æ°£è±¡å»³è‡¨æ™‚èˆ‰è¾¦äº†é—œæ–¼æ²¿å—æµ·æµ·æ§½åœ°éœ‡çš„評估檢討會。評估èªç‚ºï¼Œç”±æ–¼æœ¬æ¬¡åœ°éœ‡çš„矩震級為8.0æˆ–ä»¥ä¸Šï¼ŒåŒ…æ‹¬ä¸æ˜¯æœ¬æ¬¡åœ°éœ‡çš„震æºåŸŸçš„å€åŸŸåœ¨å…§ï¼Œå—æµ·æµ·æ§½åœ°éœ‡çš„é æƒ³éœ‡æºåŸŸå…§ï¼Œå¤§è¦æ¨¡åœ°éœ‡ç™¼ç”Ÿçš„å¯èƒ½æ€§èˆ‡å¹³å¸¸ç›¸æ¯”相å°è¼ƒé«˜ã€‚\n請根據政府和自治體等後續的呼籲等採å–é˜²ç½æŽªæ–½ã€‚\næ°£è±¡å»³å°‡ç¹¼çºŒå¯†åˆ‡ç›£è¦–æ²¿å—æµ·æµ·æ§½åœ°æ®¼æ´»å‹•的推移。", + "130": "æ°£è±¡å»³è‡¨æ™‚èˆ‰è¾¦äº†é—œæ–¼æ²¿å—æµ·æµ·æ§½åœ°éœ‡çš„評估檢討會。評估èªç‚ºï¼Œå—æµ·æµ·æ§½åœ°éœ‡çš„é æƒ³éœ‡æºåŸŸå…§ï¼Œå¤§è¦æ¨¡åœ°éœ‡ç™¼ç”Ÿçš„å¯èƒ½æ€§èˆ‡å¹³å¸¸ç›¸æ¯”相å°è¼ƒé«˜ã€‚\n請根據政府和自治體等後續的呼籲等採å–é˜²ç½æŽªæ–½ã€‚\næ°£è±¡å»³å°‡ç¹¼çºŒå¯†åˆ‡ç›£è¦–æ²¿å—æµ·æµ·æ§½åœ°æ®¼æ´»å‹•的推移。", + "190": "æ°£è±¡å»³è‡¨æ™‚èˆ‰è¾¦äº†é—œæ–¼æ²¿å—æµ·æµ·æ§½åœ°éœ‡çš„評估檢討會。評估èªç‚ºï¼Œæ²’æœ‰è§€æ¸¬åˆ°èƒ½å¤ è¡¨æ˜Žæ²¿å—æµ·æµ·æ§½çš„å¤§è¦æ¨¡åœ°éœ‡ç™¼ç”Ÿçš„å¯èƒ½æ€§èˆ‡å¹³å¸¸ç›¸æ¯”相å°è¼ƒé«˜çš„變化。\næ°£è±¡å»³å°‡ç¹¼çºŒå¯†åˆ‡ç›£è¦–æ²¿å—æµ·æµ·æ§½åœ°æ®¼æ´»å‹•的推移。", + "200": "æ°£è±¡å»³èˆ‰è¾¦äº†é—œæ–¼æ²¿å—æµ·æµ·æ§½åœ°éœ‡çš„評估檢討會。當å‰ï¼Œæ²’æœ‰è§€æ¸¬åˆ°èƒ½å¤ è¡¨æ˜Žæ²¿å—æµ·æµ·æ§½çš„å¤§è¦æ¨¡åœ°éœ‡ç™¼ç”Ÿçš„å¯èƒ½æ€§èˆ‡å¹³å¸¸ç›¸æ¯”相å°è¼ƒé«˜çš„變化。", + "210": "政府正在è½å¯¦å°å—æµ·æµ·æ§½åœ°éœ‡é˜²ç½æŽ¨é€²åœ°å€åšå¥½è­¦æˆ’æˆ–æ³¨æ„æŽªæ–½çš„å‘¼ç±²ç­‰ã€‚è«‹ç¹¼çºŒæ ¹æ“šæ”¿åºœå’Œè‡ªæ²»é«”ç­‰å¾ŒçºŒçš„å‘¼ç±²ç­‰æŽ¡å–é˜²ç½æŽªæ–½ã€‚\næ°£è±¡å»³å°‡ç¹¼çºŒå¯†åˆ‡ç›£è¦–æ²¿å—æµ·æµ·æ§½åœ°æ®¼æ´»å‹•的推移。", + "219": "政府正在è½å¯¦å°å—æµ·æµ·æ§½åœ°éœ‡é˜²ç½æŽ¨é€²åœ°å€åšå¥½è­¦æˆ’æˆ–æ³¨æ„æŽªæ–½çš„å‘¼ç±²ç­‰ã€‚è«‹ç¹¼çºŒæ ¹æ“šæ”¿åºœå’Œè‡ªæ²»é«”ç­‰å¾ŒçºŒçš„å‘¼ç±²ç­‰æŽ¡å–é˜²ç½æŽªæ–½ã€‚\næ°£è±¡å»³å°‡ç¹¼çºŒå¯†åˆ‡ç›£è¦–æ²¿å—æµ·æµ·æ§½åœ°æ®¼æ´»å‹•的推移。" + } + }, + "PlumeDirection": { + "Strings": { + "北": "北", + "北æ±": "æ±åŒ—", + "北西": "西北", + "å—": "å—", + "å—æ±": "æ±å—", + "å—西": "西å—", + "æ–¹å‘ä¸å®š": "ä¸å®š", + "æ±": "æ±", + "ç«å£è¿‘å‚": "è¿‘æ—", + "直上": "直上", + "西": "西" + } + }, + "Status": { + "Strings": { + "訓練": "本報為訓練報。", + "試験": "本報為試驗報。" + } + }, + "Title": { + "Strings": { + "": "電文", + "北海é“ãƒ»ä¸‰é™¸æ²–å¾Œç™ºåœ°éœ‡æ³¨æ„æƒ…å ±": "北海é“ã€ä¸‰é™¸å¤–海餘震注æ„資訊", + "å—æµ·ãƒˆãƒ©ãƒ•地震ã«é–¢é€£ã™ã‚‹æƒ…å ±": "é—œæ–¼å—æµ·æµ·æ§½åœ°éœ‡çš„資訊", + "å™´ç«ã«é–¢ã™ã‚‹ç«å±±è¦³æ¸¬å ±": "關於ç«å±±å™´ç™¼çš„ç«å±±è§€æ¸¬å ±", + "å™´ç«è­¦å ±ãƒ»äºˆå ±": "ç«å±±å™´ç™¼è­¦å ±ã€é å ±", + "å™´ç«é€Ÿå ±": "ç«å±±å™´ç™¼é€Ÿå ±", + "åœ°éœ‡ã®æ´»å‹•状æ³ç­‰ã«é–¢ã™ã‚‹æƒ…å ±": "關於地震的活動狀æ³ç­‰çš„資訊", + "地震回数情報": "地震次數資訊", + "地震情報": "地震資訊", + "推定噴煙æµå‘å ±": "推定噴煙æµå‘å ±", + "津波情報": "海嘯資訊", + "津波警報・注æ„報・予報": "æµ·å˜¯è­¦å ±ã€æ³¨æ„å ±ã€é å ±", + "ç«å±±ã®çжæ³ã«é–¢ã™ã‚‹è§£èª¬æƒ…å ±": "關於ç«å±±çš„ç‹€æ³çš„解説資訊", + "長周期地震動ã«é–¢ã™ã‚‹è¦³æ¸¬æƒ…å ±": "關於長周期地震動的觀測資訊", + "é™ç°äºˆå ±": "é™ç°é å ±", + "震度速報": "震度速報", + "震æºè¦ç´ æ›´æ–°ã®ãŠçŸ¥ã‚‰ã›": "震æºè¦ç´ æ›´æ–°é€šçŸ¥", + "震æºé€Ÿå ±": "震æºé€Ÿå ±" + } + }, + "TsunamiForecastCategory": { + "Strings": { + "51": "海嘯警報", + "52": "大海嘯警報", + "53": "大海嘯警報", + "62": "海嘯注æ„å ±", + "71": "海嘯é å ±ï¼ˆè‹¥å¹²çš„æµ·é¢è®Šå‹•)", + "72": "海嘯é å ±ï¼ˆè‹¥å¹²çš„æµ·é¢è®Šå‹•)", + "73": "海嘯é å ±ï¼ˆè‹¥å¹²çš„æµ·é¢è®Šå‹•)" + } + }, + "TsunamiForecastFirstHeightCondition": { + "Strings": { + "ãŸã ã¡ã«æ´¥æ³¢æ¥è¥²ã¨äºˆæ¸¬": "é æ¸¬æµ·å˜¯å³å°‡ä¾†è¥²", + "æ—¢ã«æ´¥æ³¢åˆ°é”ã¨æŽ¨æ¸¬": "推測海嘯已經到é”", + "津波到é”ä¸­ã¨æŽ¨æ¸¬": "推測海嘯正在到é”", + "第1波ã®åˆ°é”を確èª": "第一波已確èªåˆ°é”" + } + }, + "TsunamiObservationMaxHeightCondition": { + "Strings": { + "微弱": "微弱", + "欠測": "缺失數據", + "観測中": "觀測中" + } + }, + "VolcanicWarning": { + "Strings": { + "11": "等級1(活ç«å±±ç•™æ„)", + "12": "等級2(ç«å±±å£å‘¨é‚Šç®¡åˆ¶ï¼‰", + "13": "等級3(入山管制)", + "14": "等級4(è€å¹´äººç­‰é¿é›£ï¼‰", + "15": "等級5(é¿é›£ï¼‰", + "21": "æ´»ç«å±±ç•™æ„", + "22": "ç«å±±å£å‘¨é‚Šå±éšª", + "23": "入山å±éšª", + "24": "山麓嚴é‡è­¦æˆ’", + "25": "å±…ä½å€åŸŸåš´é‡è­¦æˆ’", + "31": "海上警報(ç«å±±å™´ç™¼è­¦å ±ï¼‰", + "32": "海上警報(ç«å±±å™´ç™¼è­¦å ±è§£é™¤ï¼‰", + "33": "海上é å ±ï¼ˆç«å±±å™´ç™¼é å ±ï¼‰", + "35": "æ´»ç«å±±ç•™æ„(海底ç«å±±ï¼‰", + "36": "周邊海域警戒", + "51": "爆發", + "52": "噴發", + "53": "開始噴發", + "54": "æŒçºŒé€£çºŒå™´ç™¼", + "55": "åœæ­¢é€£çºŒå™´ç™¼", + "56": "噴發多發", + "61": "似乎已經爆發", + "62": "似乎已經噴發", + "63": "似乎已經開始噴發", + "64": "似乎正在æŒçºŒé€£çºŒå™´ç™¼", + "65": "ä¼¼ä¹Žå·²ç¶“åœæ­¢é€£çºŒå™´ç™¼", + "70": "é™ç°", + "71": "å°‘é‡é™ç°", + "72": "較多é™ç°", + "73": "大é‡é™ç°", + "75": "å°åž‹å™´çŸ³è½ä¸‹" + } + }, + "VolcanoObservationPlumeHeightAboveCraterValue": { + "Strings": { + "": "{0}公尺", + "上昇中": "{0}公尺(上å‡ä¸­ï¼‰", + "以上": "{0}公尺以上", + "雲ã«å…¥ã‚‹": "{0}公尺(進入雲層)" + } + }, + "WindDegreeValue": { + "Strings": { + "": "{0}", + "䏿˜Ž": "䏿˜Ž" + } + }, + "WindSpeedValue": { + "Strings": { + "": "{0}節", + "䏿˜Ž": "䏿˜Ž" + } + } + } +} \ No newline at end of file diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.JMAAtom.TTS/zh-Hant.json.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.JMAAtom.TTS/zh-Hant.json.meta new file mode 100644 index 0000000..fd46d77 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.JMAAtom.TTS/zh-Hant.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 2d7056e4fbd1d4c489fb243d030e60e8 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.JMAAtom.TTS/zh.json b/Assets/StreamingAssets/Messages/Cryville.EEW.JMAAtom.TTS/zh.json new file mode 100644 index 0000000..3250cc1 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.JMAAtom.TTS/zh.json @@ -0,0 +1,270 @@ +{ + "Culture": "zh-CN", + "Strings": { + "AshInfo": "从{0:HH}时到{1:HH}时,ç«å±±å£{2}。", + "AshInfoItem": "{0}{1}åƒç±³ä¼šæœ‰{2}", + "Cancel": "å–æ¶ˆåˆšæ‰å‘布的{0}。", + "EarthquakeCount": "从{0:dæ—¥HHæ—¶}到{1:dæ—¥HHæ—¶}{2}。", + "EarthquakeCountFeltNumber": ",有感地震å‘生{0}次", + "EarthquakeCountNumber": ",地震å‘生{0}次", + "EarthquakeCountTotal": "åˆè®¡ï¼š{0}", + "EarthquakeHypocenterArea": "震æºä½äºŽ{0}。", + "EarthquakeHypocenterDepth": "éœ‡æºæ·±åº¦çº¦{0}åƒç±³ã€‚", + "EarthquakeHypocenterDepth0": "éœ‡æºæ·±åº¦ä¸ºæžæµ…。", + "EarthquakeHypocenterDepthUnknown": "éœ‡æºæ·±åº¦ä¸æ˜Žã€‚", + "EarthquakeMagnitude": "表示地震规模的震级推定为{0:F1}级。", + "EarthquakeMultiple": "æœ¬ä¿¡æ¯æ˜¯ç”±äºŽå¤šæ¬¡åœ°éœ‡è€Œå‘表的。", + "EarthquakeMultipleIndex": "地震{0}", + "HeadlineAshDetailed": "此次{0}å–·å‘,é™ç°ç­‰æƒ…况的详细预报如下。", + "HeadlineAshPreliminary": "此次{0}å–·å‘,é™ç°ç­‰æƒ…况的预报如下。", + "HeadlineAshScheduled": "如果{0}å–·å‘ï¼Œåœ¨å„æ—¶æ®µçš„é™ç°ç­‰æƒ…况预报如下。", + "HeadlineEarthquake": "{0:dæ—¥HH:mm},å‘生了一次地震。", + "HeadlineEruption": "{0:dæ—¥HH:mm},{1}{2}。", + "HeadlineIntensity": "{0:dæ—¥HH:mm},感知到由地震带æ¥çš„强烈摇晃。", + "HeadlinePlume": "此次{0}å–·å‘,喷烟的æµå‘推定如下。", + "HeadlineTsunamiInformationForecast": "å„地的满潮时刻和海啸到达预测时刻如下。", + "HeadlineTsunamiInformationObservation": "ç›®å‰ï¼Œæµ·å•¸çš„观测值如下。", + "HeadlineTsunamiWarning": "{0}已被å‘布。", + "HeadlineTsunamiWarningLifted": "{0}已被解除。", + "HeadlineTsunamiWarningUpdate": "当å‰å‘布中的{0}已被更新。", + "Intensity": "震度", + "IntensityObservation": "本次地震,", + "IntensityObservationArea": "观测到{0}{1}的地区有:{2}。", + "IntensityObservationMax": "本次地震,观测到的最大震度为{0}。", + "LongIntensity": "长周期地震动阶级", + "LongIntensityObservationMax": "本次地震,观测到的最大长周期地震动阶级为{0}。", + "Maximum": "最大{0}", + "MinorItemSeparator": "ï¼›", + "PlumeDirectionValue": "{0}æ–¹å‘", + "TsunamiForecast": "以下的区域正在å‘布{0}。", + "TsunamiForecastArea": "{0}。{1}。", + "TsunamiForecastFirstHeightArrivalTime": "预测到达时刻{0:t}", + "TsunamiForecastMaxHeight": "预测海啸高度为{0}。", + "TsunamiForecastSuffix": "关于震æºçš„ä¿¡æ¯", + "TsunamiHeightValue": "{0}ç±³", + "TsunamiHeightValueAffix": "{0}", + "TsunamiHeightValueAffixBelow": "䏿»¡{0}", + "TsunamiHeightValueAffixOver": "{0}以上", + "TsunamiObservationMaxHeightRising": "上å‡ä¸­ã€‚", + "TsunamiObservationStation": "{0}。{1}。{2}。", + "TsunamiObservationStationNoArea": "{0}。{1}。", + "VolcanoObservationColorPlume": "有色喷烟", + "VolcanoObservationPlume": "{0}的观测值如下。", + "VolcanoObservationPlumeDirection": "观测到的喷烟æµå‘为{0}æ–¹å‘。", + "VolcanoObservationPlumeDirectionUnknown": "喷烟æµå‘䏿˜Žã€‚", + "VolcanoObservationPlumeHeightAboveCrater": "ç«å±±å£ä¸Šæ–¹å–·çƒŸé«˜åº¦ä¸º{0}。", + "VolcanoObservationPlumeHeightAboveCraterUnknown": "ç«å±±å£ä¸Šæ–¹å–·çƒŸé«˜åº¦ä¸æ˜Žã€‚", + "VolcanoObservationPlumeNone": "æœ¬æ¬¡å–·å‘æ— {0}。", + "VolcanoObservationWhitePlume": "白色喷烟", + "VolcanoObservationWindAboveCrater": "在海拔{0}英尺高度,预测的风å‘为{1},风速为{2}。" + }, + "StringSets": { + "AdditionalCommentEarthquake": { + "Strings": { + "0101": "åŽç»­å¯èƒ½ä¼šæœ‰è‹¥å¹²çš„æµ·é¢å˜åŠ¨ã€‚", + "0102": "åŽç»­å¯èƒ½ä¼šæœ‰è‹¥å¹²çš„æµ·é¢å˜åŠ¨ï¼Œä½†æ— éœ€æ‹…å¿ƒå—ç¾ã€‚", + "0103": "æµ·é¢å˜åЍå¯èƒ½ä¼šæŒç»­ä¸€æ®µæ—¶é—´ã€‚", + "0104": "æµ·é¢å˜åЍå¯èƒ½ä¼šæŒç»­ä¸€æ®µæ—¶é—´ï¼Œè¿›è¡Œæµ·æ°´æµ´æˆ–海滨垂钓时请注æ„安全。", + "0105": "æµ·é¢å˜åЍå¯èƒ½ä¼šæŒç»­ä¸€æ®µæ—¶é—´ï¼Œè¿›è¡Œæµ·æ»¨åž‚钓时请注æ„安全。", + "0107": "当剿²¡æœ‰å‘å¸ƒå¤§æµ·å•¸è­¦æŠ¥ã€æµ·å•¸è­¦æŠ¥æˆ–æµ·å•¸æ³¨æ„æŠ¥çš„æ²¿æµ·åœ°åŒºã€‚", + "0109": "当海啸和涨潮é‡å æ—¶ï¼Œæµ·å•¸æ³¢æµªä¼šå˜å¾—更高,请æé«˜è­¦è§‰ä¸¥åŠ é˜²èŒƒã€‚", + "0110": "当海啸和涨潮é‡å æ—¶ï¼Œæµ·å•¸æ³¢æµªä¼šå˜å¾—更高,请加以注æ„。", + "0111": "ä¸åŒåœ°ç‚¹çš„æµ·å•¸æœ‰å¯èƒ½é«˜äºŽè§‚测到的海啸。", + "0112": "åŽç»­æµ·å•¸æ³¢æµªå¯èƒ½ä¼šå˜å¾—更高。", + "0113": "æ ¹æ®ç¦»å²¸çš„观测值推测海啸的沿岸,最快的情况下,推测海啸已ç»åˆ°è¾¾ã€‚", + "0114": "从观测到海啸引起的潮ä½å˜åŒ–åˆ°è§‚æµ‹åˆ°æœ€å¤§æ³¢æµªæœ‰æ—¶éœ€è¦æ•°å°æ—¶ä»¥ä¸Šã€‚", + "0115": "离岸观测到的海啸,到沿岸时会å˜å¾—更高。", + "0121": "大海啸警报\n巨大的海啸侵袭,将会造æˆä¸¥é‡çš„ç¾å®³ã€‚\nè‹¥ä½äºŽæµ·å²¸æ²¿å²¸åœ°åŒºå’Œæ²¿æ²³ä¸¤å²¸ç­‰ï¼Œè¯·ç«‹å³æ’¤ç¦»åˆ°é«˜åœ°æˆ–é¿éš¾å¤§æ¥¼ç­‰å®‰å…¨åœºæ‰€é¿éš¾ã€‚\n海啸会å夿¥è¢­ã€‚警报解除å‰è¯·ä¸è¦ç¦»å¼€å®‰å…¨åœºæ‰€ã€‚", + "0122": "海啸警报\n海啸将会引起ç¾å®³ã€‚\nè‹¥ä½äºŽæµ·å²¸æ²¿å²¸åœ°åŒºå’Œæ²¿æ²³ä¸¤å²¸ç­‰ï¼Œè¯·ç«‹å³æ’¤ç¦»åˆ°é«˜åœ°æˆ–é¿éš¾å¤§æ¥¼ç­‰å®‰å…¨åœºæ‰€é¿éš¾ã€‚\n海啸会å夿¥è¢­ã€‚警报解除å‰è¯·ä¸è¦ç¦»å¼€å®‰å…¨åœºæ‰€ã€‚", + "0123": "æµ·å•¸æ³¨æ„æŠ¥\n海上和海岸附近等地方å±é™©ã€‚\nè‹¥ä½äºŽæµ·ä¸Šï¼Œè¯·ç«‹åˆ»ä¸Šå²¸å¹¶è¿œç¦»æµ·å²¸ã€‚\n由于潮水的æµåŠ¨ä¼šå˜å¾—æ¹æ€¥ï¼Œæ³¨æ„报解除å‰è¯·ä¸è¦å…¥æµ·æˆ–é è¿‘海岸。", + "0124": "海啸预报(若干的海é¢å˜åŠ¨ï¼‰\n预计将有若干海é¢å˜åŠ¨ï¼Œä½†æ— éœ€æ‹…å¿ƒå—ç¾ã€‚", + "0131": "è‹¥ä½äºŽè¢«å‘å¸ƒè­¦æŠ¥çš„æµ·å²¸æ²¿å²¸åœ°åŒºå’Œæ²¿æ²³ä¸¤å²¸ç­‰ï¼Œè¯·ç«‹å³æ’¤ç¦»åˆ°é«˜åœ°æˆ–é¿éš¾å¤§æ¥¼ç­‰å®‰å…¨åœºæ‰€é¿éš¾ã€‚\n预测到达时刻是指该预报区内,海啸到达的最早时间。根æ®ä¸åŒçš„ä½ç½®ï¼Œåˆ°è¾¾æ—¶åˆ»æœ‰å¯èƒ½æ™šäºŽé¢„测时刻。\n由于从预测到达时刻开始直到达到最高高度有å¯èƒ½éœ€è¦æ•°å°æ—¶ä»¥ä¸Šï¼Œæ— è®ºç›®å‰æ‰€è§‚测到海啸高度如何,到警报解除å‰è¯·ä¸è¦ç¦»å¼€å®‰å…¨åœºæ‰€ã€‚", + "0132": "ä¸åŒåœ°ç‚¹çš„æµ·å•¸é«˜åº¦æœ‰å¯èƒ½å¤§äºŽé¢„测的海啸高度。", + "0141": "东日本大震ç¾çº§åˆ«çš„æµ·å•¸å³å°†æ¥è¢­ã€‚", + "0142": "因离岸观测到高海啸,切æ¢ä¸ºå¤§æµ·å•¸è­¦æŠ¥ã€æµ·å•¸è­¦æŠ¥ã€‚", + "0143": "å› ç¦»å²¸è§‚æµ‹åˆ°é«˜æµ·å•¸ï¼Œæ›´æ–°å¤§æµ·å•¸è­¦æŠ¥ã€æµ·å•¸è­¦æŠ¥ã€‚", + "0144": "因离岸观测到高海啸,切æ¢ä¸ºå¤§æµ·å•¸è­¦æŠ¥ã€‚", + "0145": "因离岸观测到高海啸,更新大海啸警报。", + "0146": "因离岸观测到高海啸,切æ¢ä¸ºæµ·å•¸è­¦æŠ¥ã€‚", + "0147": "因离岸观测到高海啸,更新海啸警报。", + "0148": "因离岸观测到高海啸,更新预测海啸高度。", + "0149": "请立å³é¿éš¾ã€‚", + "0150": "正在å‘å¸ƒå—æµ·æµ·æ§½åœ°éœ‡ä¸´æ—¶ä¿¡æ¯ã€‚", + "0201": "请警戒强烈摇晃。", + "0211": "正在å‘å¸ƒæµ·å•¸è­¦æŠ¥ç­‰ï¼ˆå¤§æµ·å•¸è­¦æŠ¥ã€æµ·å•¸è­¦æŠ¥æˆ–æµ·å•¸æ³¨æ„æŠ¥ï¼‰ã€‚", + "0212": "本次地震å¯èƒ½ä¼šå¼•起日本沿岸若干海é¢å˜åŠ¨ï¼Œä½†æ— éœ€æ‹…å¿ƒå—ç¾ã€‚", + "0213": "æµ·é¢å˜åЍå¯èƒ½ä¼šæŒç»­ä¸€æ®µæ—¶é—´ï¼Œè¿›è¡Œæµ·æ°´æµ´æˆ–海滨垂钓时请注æ„安全。", + "0214": "æµ·é¢å˜åЍå¯èƒ½ä¼šæŒç»­ä¸€æ®µæ—¶é—´ï¼Œè¿›è¡Œæµ·æ»¨åž‚钓时请注æ„安全。", + "0215": "无需担心本次地震引起海啸。", + "0216": "震æºä½äºŽæµ·åº•的情况下,å¯èƒ½ä¼šæœ‰æµ·å•¸å‘生。", + "0217": "请注æ„åŽç»­çš„ä¿¡æ¯ã€‚", + "0221": "太平洋的广大区域å¯èƒ½å‘生海啸。", + "0222": "太平洋å¯èƒ½å‘生海啸。", + "0223": "西北太平洋å¯èƒ½å‘生海啸。", + "0224": "å°åº¦æ´‹çš„广大区域å¯èƒ½å‘生海啸。", + "0225": "å°åº¦æ´‹å¯èƒ½å‘生海啸。", + "0226": "震æºé™„è¿‘å¯èƒ½å‘生海啸。", + "0227": "震æºé™„è¿‘å¯èƒ½å‘ç”Ÿå°æµ·å•¸ï¼Œä½†æ— éœ€æ‹…心å‘生造æˆå—ç¾çš„æµ·å•¸ã€‚", + "0228": "一般æ¥è¯´ï¼Œå¦‚果在浅海区域å‘生这ç§è§„模的地震,则有时会å‘生海啸。", + "0229": "æ­£åœ¨è°ƒæŸ¥æœ‰æ— æµ·å•¸æ³¢åŠæ—¥æœ¬ã€‚", + "0230": "è¯¥åœ°éœ‡æ²¡æœ‰å¼•å‘æµ·å•¸æ³¢åŠæ—¥æœ¬çš„å½±å“。", + "0241": "å·²å‘布此地震相关的紧急地震速报。", + "0242": "å·²å‘布此地震相关的紧急地震速报。此地震的最大震度为2。", + "0243": "å·²å‘布此地震相关的紧急地震速报。此地震的最大震度为1。", + "0244": "å·²å‘布此地震相关的紧急地震速报。未监测到此地震震度超过1。", + "0245": "å·²å‘布此地震相关的紧急地震速报,但未监测到强烈摇晃。", + "0256": "订正震æºè¦ç´ ã€‚" + } + }, + "EarthquakeMagnitudeUnknown": { + "Strings": { + "": "åœ°éœ‡çš„è§„æ¨¡ä¸æ˜Žã€‚", + "M8を超ãˆã‚‹å·¨å¤§åœ°éœ‡": "推定本次地震为震级大于8的巨大地震" + } + }, + "HeadlineVolcanoWarning": { + "Strings": { + "": "当å‰ï¼Œ{0}为ç«å±±å–·å‘警戒{2}。", + "引上ã’": "{0}çš„ç«å±±å–·å‘警戒{1}上调为{2}。", + "引下ã’": "{0}çš„ç«å±±å–·å‘警戒{1}下调为{2}。" + } + }, + "NankaiTroughInfo": { + "Strings": { + "111": "å—æµ·æµ·æ§½åœ°éœ‡çš„监视区域内å‘生了规模6.8或以上的地震。\n气象厅已ç»å¼€å§‹è°ƒæŸ¥æœ¬æ¬¡å‘ç”Ÿçš„åœ°éœ‡ä¸Žå—æµ·æµ·æ§½åœ°éœ‡çš„å…³è”æ€§ï¼Œå¹¶ä¸¾åŠžå…³äºŽæ²¿å—æµ·æµ·æ§½åœ°éœ‡çš„评估检讨会。\nè‹¥ä½äºŽå—海海槽地震的预想å—ç¾åœ°åŒºï¼Œè¯·æ ¹æ®å„自的情况,采å–è¡ŒåŠ¨ä¿æŠ¤è‡ªèº«å®‰å…¨ã€‚", + "112": "应å˜è§‚测点观测到了显著的å˜åŒ–,且å˜åŒ–正在增大。\n气象厅已ç»å¼€å§‹è°ƒæŸ¥è§‚æµ‹åˆ°çš„çŽ°è±¡ä¸Žå—æµ·æµ·æ§½åœ°éœ‡çš„å…³è”æ€§ï¼Œå¹¶ä¸¾åŠžå…³äºŽæ²¿å—æµ·æµ·æ§½åœ°éœ‡çš„评估检讨会。\nè‹¥ä½äºŽå—海海槽地震的预想å—ç¾åœ°åŒºï¼Œè¯·æ³¨æ„åŽç»­çš„ä¿¡æ¯ã€‚", + "113": "观测到了å¯èƒ½è¡¨æ˜Žé¢„想震æºåŸŸå†…çš„æ¿å—边界的固ç€çжæ€å‘生å˜åŒ–的现象。\n气象厅已ç»å¼€å§‹è°ƒæŸ¥è§‚æµ‹åˆ°çš„çŽ°è±¡ä¸Žå—æµ·æµ·æ§½åœ°éœ‡çš„å…³è”æ€§ï¼Œå¹¶ä¸¾åŠžå…³äºŽæ²¿å—æµ·æµ·æ§½åœ°éœ‡çš„评估检讨会。\nè‹¥ä½äºŽå—海海槽地震的预想å—ç¾åœ°åŒºï¼Œè¯·æ³¨æ„åŽç»­çš„ä¿¡æ¯ã€‚", + "120": "æ°”è±¡åŽ…ä¸´æ—¶ä¸¾åŠžäº†å…³äºŽæ²¿å—æµ·æµ·æ§½åœ°éœ‡çš„评估检讨会。评估认为,由于本次地震的矩震级为8.0æˆ–ä»¥ä¸Šï¼ŒåŒ…æ‹¬ä¸æ˜¯æœ¬æ¬¡åœ°éœ‡çš„震æºåŸŸçš„åŒºåŸŸåœ¨å†…ï¼Œå—æµ·æµ·æ§½åœ°éœ‡çš„预想震æºåŸŸå†…,大规模地震å‘生的å¯èƒ½æ€§ä¸Žå¹³å¸¸ç›¸æ¯”相对较高。\nè¯·æ ¹æ®æ”¿åºœå’Œè‡ªæ²»ä½“ç­‰åŽç»­çš„呼å等采å–é˜²ç¾æŽªæ–½ã€‚\næ°”è±¡åŽ…å°†ç»§ç»­å¯†åˆ‡ç›‘è§†æ²¿å—æµ·æµ·æ§½åœ°å£³æ´»åŠ¨çš„æŽ¨ç§»ã€‚", + "130": "æ°”è±¡åŽ…ä¸´æ—¶ä¸¾åŠžäº†å…³äºŽæ²¿å—æµ·æµ·æ§½åœ°éœ‡çš„è¯„ä¼°æ£€è®¨ä¼šã€‚è¯„ä¼°è®¤ä¸ºï¼Œå—æµ·æµ·æ§½åœ°éœ‡çš„预想震æºåŸŸå†…,大规模地震å‘生的å¯èƒ½æ€§ä¸Žå¹³å¸¸ç›¸æ¯”相对较高。\nè¯·æ ¹æ®æ”¿åºœå’Œè‡ªæ²»ä½“ç­‰åŽç»­çš„呼å等采å–é˜²ç¾æŽªæ–½ã€‚\næ°”è±¡åŽ…å°†ç»§ç»­å¯†åˆ‡ç›‘è§†æ²¿å—æµ·æµ·æ§½åœ°å£³æ´»åŠ¨çš„æŽ¨ç§»ã€‚", + "190": "æ°”è±¡åŽ…ä¸´æ—¶ä¸¾åŠžäº†å…³äºŽæ²¿å—æµ·æµ·æ§½åœ°éœ‡çš„è¯„ä¼°æ£€è®¨ä¼šã€‚è¯„ä¼°è®¤ä¸ºï¼Œæ²¡æœ‰è§‚æµ‹åˆ°èƒ½å¤Ÿè¡¨æ˜Žæ²¿å—æµ·æµ·æ§½çš„大规模地震å‘生的å¯èƒ½æ€§ä¸Žå¹³å¸¸ç›¸æ¯”相对较高的å˜åŒ–。\næ°”è±¡åŽ…å°†ç»§ç»­å¯†åˆ‡ç›‘è§†æ²¿å—æµ·æµ·æ§½åœ°å£³æ´»åŠ¨çš„æŽ¨ç§»ã€‚", + "200": "æ°”è±¡åŽ…ä¸¾åŠžäº†å…³äºŽæ²¿å—æµ·æµ·æ§½åœ°éœ‡çš„评估检讨会。当å‰ï¼Œæ²¡æœ‰è§‚æµ‹åˆ°èƒ½å¤Ÿè¡¨æ˜Žæ²¿å—æµ·æµ·æ§½çš„大规模地震å‘生的å¯èƒ½æ€§ä¸Žå¹³å¸¸ç›¸æ¯”相对较高的å˜åŒ–。", + "210": "政府正在è½å®žå¯¹å—æµ·æµ·æ§½åœ°éœ‡é˜²ç¾æŽ¨è¿›åœ°åŒºåšå¥½è­¦æˆ’æˆ–æ³¨æ„æŽªæ–½çš„å‘¼åç­‰ã€‚è¯·ç»§ç»­æ ¹æ®æ”¿åºœå’Œè‡ªæ²»ä½“ç­‰åŽç»­çš„呼å等采å–é˜²ç¾æŽªæ–½ã€‚\næ°”è±¡åŽ…å°†ç»§ç»­å¯†åˆ‡ç›‘è§†æ²¿å—æµ·æµ·æ§½åœ°å£³æ´»åŠ¨çš„æŽ¨ç§»ã€‚", + "219": "政府正在è½å®žå¯¹å—æµ·æµ·æ§½åœ°éœ‡é˜²ç¾æŽ¨è¿›åœ°åŒºåšå¥½è­¦æˆ’æˆ–æ³¨æ„æŽªæ–½çš„å‘¼åç­‰ã€‚è¯·ç»§ç»­æ ¹æ®æ”¿åºœå’Œè‡ªæ²»ä½“ç­‰åŽç»­çš„呼å等采å–é˜²ç¾æŽªæ–½ã€‚\næ°”è±¡åŽ…å°†ç»§ç»­å¯†åˆ‡ç›‘è§†æ²¿å—æµ·æµ·æ§½åœ°å£³æ´»åŠ¨çš„æŽ¨ç§»ã€‚" + } + }, + "PlumeDirection": { + "Strings": { + "北": "北", + "北æ±": "东北", + "北西": "西北", + "å—": "å—", + "å—æ±": "东å—", + "å—西": "西å—", + "æ–¹å‘ä¸å®š": "ä¸å®š", + "æ±": "东", + "ç«å£è¿‘å‚": "è¿‘æ—", + "直上": "直上", + "西": "西" + } + }, + "Status": { + "Strings": { + "訓練": "本报为训练报。", + "試験": "本报为试验报。" + } + }, + "Title": { + "Strings": { + "": "电文", + "北海é“ãƒ»ä¸‰é™¸æ²–å¾Œç™ºåœ°éœ‡æ³¨æ„æƒ…å ±": "北海é“ã€ä¸‰é™†å¤–海余震注æ„ä¿¡æ¯", + "å—æµ·ãƒˆãƒ©ãƒ•地震ã«é–¢é€£ã™ã‚‹æƒ…å ±": "å…³äºŽå—æµ·æµ·æ§½åœ°éœ‡çš„ä¿¡æ¯", + "å™´ç«ã«é–¢ã™ã‚‹ç«å±±è¦³æ¸¬å ±": "关于ç«å±±å–·å‘çš„ç«å±±è§‚测报", + "å™´ç«è­¦å ±ãƒ»äºˆå ±": "ç«å±±å–·å‘警报ã€é¢„报", + "å™´ç«é€Ÿå ±": "ç«å±±å–·å‘速报", + "åœ°éœ‡ã®æ´»å‹•状æ³ç­‰ã«é–¢ã™ã‚‹æƒ…å ±": "关于地震的活动状况等的信æ¯", + "地震回数情報": "地震次数信æ¯", + "地震情報": "地震信æ¯", + "推定噴煙æµå‘å ±": "推定喷烟æµå‘报", + "津波情報": "海啸信æ¯", + "津波警報・注æ„報・予報": "æµ·å•¸è­¦æŠ¥ã€æ³¨æ„报ã€é¢„报", + "ç«å±±ã®çжæ³ã«é–¢ã™ã‚‹è§£èª¬æƒ…å ±": "关于ç«å±±çš„状况的解说信æ¯", + "長周期地震動ã«é–¢ã™ã‚‹è¦³æ¸¬æƒ…å ±": "关于长周期地震动的观测信æ¯", + "é™ç°äºˆå ±": "é™ç°é¢„报", + "震度速報": "震度速报", + "震æºè¦ç´ æ›´æ–°ã®ãŠçŸ¥ã‚‰ã›": "震æºè¦ç´ æ›´æ–°é€šçŸ¥", + "震æºé€Ÿå ±": "震æºé€ŸæŠ¥" + } + }, + "TsunamiForecastCategory": { + "Strings": { + "51": "海啸警报", + "52": "大海啸警报", + "53": "大海啸警报", + "62": "æµ·å•¸æ³¨æ„æŠ¥", + "71": "海啸预报(若干的海é¢å˜åŠ¨ï¼‰", + "72": "海啸预报(若干的海é¢å˜åŠ¨ï¼‰", + "73": "海啸预报(若干的海é¢å˜åŠ¨ï¼‰" + } + }, + "TsunamiForecastFirstHeightCondition": { + "Strings": { + "ãŸã ã¡ã«æ´¥æ³¢æ¥è¥²ã¨äºˆæ¸¬": "预测海啸å³å°†æ¥è¢­", + "æ—¢ã«æ´¥æ³¢åˆ°é”ã¨æŽ¨æ¸¬": "推测海啸已ç»åˆ°è¾¾", + "津波到é”ä¸­ã¨æŽ¨æ¸¬": "推测海啸正在到达", + "第1波ã®åˆ°é”を確èª": "第一波已确认到达" + } + }, + "TsunamiObservationMaxHeightCondition": { + "Strings": { + "微弱": "微弱", + "欠測": "缺失数æ®", + "観測中": "观测中" + } + }, + "VolcanicWarning": { + "Strings": { + "11": "等级1(活ç«å±±ç•™æ„)", + "12": "等级2(ç«å±±å£å‘¨è¾¹ç®¡åˆ¶ï¼‰", + "13": "等级3(入山管制)", + "14": "等级4(è€å¹´äººç­‰é¿éš¾ï¼‰", + "15": "等级5(é¿éš¾ï¼‰", + "21": "æ´»ç«å±±ç•™æ„", + "22": "ç«å±±å£å‘¨è¾¹å±é™©", + "23": "入山å±é™©", + "24": "山麓严é‡è­¦æˆ’", + "25": "å±…ä½åŒºåŸŸä¸¥é‡è­¦æˆ’", + "31": "海上警报(ç«å±±å–·å‘警报)", + "32": "海上警报(ç«å±±å–·å‘警报解除)", + "33": "海上预报(ç«å±±å–·å‘预报)", + "35": "æ´»ç«å±±ç•™æ„(海底ç«å±±ï¼‰", + "36": "周边海域警戒", + "51": "爆å‘", + "52": "å–·å‘", + "53": "开始喷å‘", + "54": "æŒç»­è¿žç»­å–·å‘", + "55": "åœæ­¢è¿žç»­å–·å‘", + "56": "å–·å‘多å‘", + "61": "似乎已ç»çˆ†å‘", + "62": "似乎已ç»å–·å‘", + "63": "似乎已ç»å¼€å§‹å–·å‘", + "64": "似乎正在æŒç»­è¿žç»­å–·å‘", + "65": "似乎已ç»åœæ­¢è¿žç»­å–·å‘", + "70": "é™ç°", + "71": "å°‘é‡é™ç°", + "72": "较多é™ç°", + "73": "大é‡é™ç°", + "75": "å°åž‹å–·çŸ³è½ä¸‹" + } + }, + "VolcanoObservationPlumeHeightAboveCraterValue": { + "Strings": { + "": "{0}ç±³", + "上昇中": "{0}米(上å‡ä¸­ï¼‰", + "以上": "{0}米以上", + "雲ã«å…¥ã‚‹": "{0}米(进入云层)" + } + }, + "WindDegreeValue": { + "Strings": { + "": "{0}", + "䏿˜Ž": "䏿˜Ž" + } + }, + "WindSpeedValue": { + "Strings": { + "": "{0}节", + "䏿˜Ž": "䏿˜Ž" + } + } + } +} \ No newline at end of file diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.JMAAtom.TTS/zh.json.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.JMAAtom.TTS/zh.json.meta new file mode 100644 index 0000000..da7a1d7 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.JMAAtom.TTS/zh.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: f179170ddfb542342a9b7481f2fbefad +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.JMAAtom.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.JMAAtom.meta new file mode 100644 index 0000000..2424e78 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.JMAAtom.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: cccfeee4c24a1c1409e5f1c47fdf0c6f +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.JMAAtom/en.json b/Assets/StreamingAssets/Messages/Cryville.EEW.JMAAtom/en.json new file mode 100644 index 0000000..197a5aa --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.JMAAtom/en.json @@ -0,0 +1,6 @@ +{ + "Culture": "en-US", + "Strings": { + "SourceName": "JMA Atom" + } +} \ No newline at end of file diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.JMAAtom/en.json.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.JMAAtom/en.json.meta new file mode 100644 index 0000000..7f6ddce --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.JMAAtom/en.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: c4f9f23cdd4f93a49a07a7a74067b1fa +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.JMAAtom/und.json b/Assets/StreamingAssets/Messages/Cryville.EEW.JMAAtom/und.json new file mode 100644 index 0000000..c53270b --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.JMAAtom/und.json @@ -0,0 +1,6 @@ +{ + "Culture": "ja-JP", + "Strings": { + "SourceName": "JMA Atom" + } +} \ No newline at end of file diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.JMAAtom/und.json.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.JMAAtom/und.json.meta new file mode 100644 index 0000000..2510019 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.JMAAtom/und.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: acfc0d7ca3ab57141b9a5f3126de2a44 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.JMAAtom/yue.json b/Assets/StreamingAssets/Messages/Cryville.EEW.JMAAtom/yue.json new file mode 100644 index 0000000..75c3816 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.JMAAtom/yue.json @@ -0,0 +1,6 @@ +{ + "Culture": "yue-HK", + "Strings": { + "SourceName": "JMA Atom" + } +} \ No newline at end of file diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.JMAAtom/yue.json.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.JMAAtom/yue.json.meta new file mode 100644 index 0000000..cf1c390 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.JMAAtom/yue.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 9af6afb790a959944a984d2345953c14 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.JMAAtom/zh-Hant.json b/Assets/StreamingAssets/Messages/Cryville.EEW.JMAAtom/zh-Hant.json new file mode 100644 index 0000000..f8223b7 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.JMAAtom/zh-Hant.json @@ -0,0 +1,6 @@ +{ + "Culture": "zh-TW", + "Strings": { + "SourceName": "JMA Atom" + } +} \ No newline at end of file diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.JMAAtom/zh-Hant.json.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.JMAAtom/zh-Hant.json.meta new file mode 100644 index 0000000..c10f894 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.JMAAtom/zh-Hant.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 5f07b9cfc6af3584eae062cee15a9708 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.JMAAtom/zh.json b/Assets/StreamingAssets/Messages/Cryville.EEW.JMAAtom/zh.json new file mode 100644 index 0000000..1935486 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.JMAAtom/zh.json @@ -0,0 +1,6 @@ +{ + "Culture": "zh-CN", + "Strings": { + "SourceName": "JMA Atom" + } +} \ No newline at end of file diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.JMAAtom/zh.json.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.JMAAtom/zh.json.meta new file mode 100644 index 0000000..1360ec2 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.JMAAtom/zh.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 26af67557e8e6dd468d8195fb80e0f02 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.NOAA.TTS.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.NOAA.TTS.meta new file mode 100644 index 0000000..e2f5062 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.NOAA.TTS.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: db7b500f192318b4ca3a1171ec3828b2 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.NOAA.TTS/und.json b/Assets/StreamingAssets/Messages/Cryville.EEW.NOAA.TTS/und.json new file mode 100644 index 0000000..e7fef42 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.NOAA.TTS/und.json @@ -0,0 +1,389 @@ +{ + "Culture": "en-US", + "Strings": { + "NoSegmentCategoryHeadline": "The tsunami threat from this earthquake has now passed.", + "PreliminarySeismicInformation": "An earthquake with a preliminary magnitude of {0:F1} occurred in {1}, at {2:HH:mm 'UTC' 'on' dddd MMM dd yyyy}. The hypocenter depth is {3} {4}.", + "RegionDelimiter": ". " + }, + "StringSets": { + "HypocenterDepthUnit": { + "Strings": { + "kilometers": "kilometers", + "miles": "miles" + } + }, + "SegmentCategoryHeadlines": { + "Strings": { + "Cancellation": "The tsunami Warning, Advisory, or Watch is canceled for some coastal areas of the following regions.\n{0}.", + "Information": "There is no tsunami threat to {0} from this earthquake.", + "Potential Threat": "Hazardous tsunami waves from this earthquake are possible along the coasts of the following regions.\n{0}.", + "Threat": "Hazardous tsunami waves from this earthquake are possible along the coasts of the following regions.\n{0}.", + "0-0.3 meters": "Tsunami waves are forecast to be less than 0.3 meters above the tide level for the coasts of the following regions.\n{0}.", + "0.3-1 meters": "Tsunami waves 0.3 to 1 meters above the tide level are possible for some coasts of the following regions.\n{0}.", + "1-3 meters": "Tsunami waves 1 to 3 meters above the tide level are possible for some coasts of the following regions.\n{0}.", + ">3.0 meters": "Tsunami waves more than 3 meters above the tide level are possible for some coasts of the following regions.\n{0}.", + "Watch": "A tsunami Watch is in effect for some coastal areas of the following regions.\n{0}.", + "Advisory": "A tsunami Advisory is in effect for some coastal areas of the following regions.\n{0}.", + "Warning": "A tsunami Warning is in effect for some coastal areas of the following regions.\n{0}." + } + }, + "States": { + "Strings": { + "AK": "Alaska", + "AL": "Alabama", + "AS": "American Samoa", + "CA": "California", + "CT": "Connecticut", + "DC": "Washington, D.C.", + "DE": "Delaware", + "FL": "Florida", + "FM": "Federated States of Micronesia", + "GA": "Georgia", + "GU": "Guam", + "HI": "Hawaii", + "LA": "Louisiana", + "MA": "Massachusetts", + "MD": "Maryland", + "ME": "Maine", + "MH": "Marshall Islands", + "MP": "Northern Mariana Islands", + "MS": "Mississippi", + "NC": "North Carolina", + "NH": "New Hampshire", + "NJ": "New Jersey", + "NY": "New York", + "OR": "Oregon", + "PR": "Puerto Rico", + "PW": "Palau", + "RI": "Rhode Island", + "SC": "South Carolina", + "TX": "Texas", + "VA": "Virginia", + "VI": "U.S. Virgin Islands", + "WA": "Washington" + } + }, + "TargetRegion": { + "Strings": { + "": "unknown region", + "WEAK": "Alaska, British Colombia, and US West Coast", + "WECA": "non US Caribbean", + "WECA40": "Puerto Rico and Virgin Islands", + "WECA42": "Puerto Rico and Virgin Islands", + "WECA60": "Puerto Rico and Virgin Islands", + "WEGM": "Guam and CNMI", + "WEHW": "Hawaii", + "WEPA": "non US Pacific", + "WEPA41": "Alaska, British Colombia, and US West Coast", + "WEXX": "US Atlantic, Gulf of Mexico, and Canada", + "WEZS": "American Samoa" + } + }, + "Territories": { + "Strings": { + "Chuuk": "Chuuk", + "Hawaii": "Hawaii", + "Howland and Baker": "Howland and Baker", + "Jarvis Island": "Jarvis Island", + "Johnston Atoll": "Johnston Atoll", + "Kermadec Islands": "Kermadec Islands", + "Kosrae": "Kosrae", + "Midway Island": "Midway Island", + "Palmyra Island": "Palmyra Island", + "Pohnpei": "Pohnpei", + "Wake Island": "Wake Island", + "Yap": "Yap", + "Saba and Saint Eustatius": "Saba and Saint Eustatius", + "San Andres and Providencia": "San Andres and Providencia", + "AC": "Ascension Island", + "AD": "Andorra", + "AE": "United Arab Emirates", + "AF": "Afghanistan", + "AG": "Antigua & Barbuda", + "AI": "Anguilla", + "AL": "Albania", + "AM": "Armenia", + "AO": "Angola", + "AQ": "Antarctica", + "AR": "Argentina", + "AS": "American Samoa", + "AT": "Austria", + "AU": "Australia", + "AW": "Aruba", + "AX": "Ã…land Islands", + "AZ": "Azerbaijan", + "BA": "Bosnia & Herzegovina", + "BB": "Barbados", + "BD": "Bangladesh", + "BE": "Belgium", + "BF": "Burkina Faso", + "BG": "Bulgaria", + "BH": "Bahrain", + "BI": "Burundi", + "BJ": "Benin", + "BL": "St. Barthélemy", + "BM": "Bermuda", + "BN": "Brunei", + "BO": "Bolivia", + "BQ": "Caribbean Netherlands", + "BR": "Brazil", + "BS": "Bahamas", + "BT": "Bhutan", + "BV": "Bouvet Island", + "BW": "Botswana", + "BY": "Belarus", + "BZ": "Belize", + "CA": "Canada", + "CC": "Cocos (Keeling) Islands", + "CD": "Congo - Kinshasa", + "CF": "Central African Republic", + "CG": "Congo - Brazzaville", + "CH": "Switzerland", + "CI": "Côte d’Ivoire", + "CK": "Cook Islands", + "CL": "Chile", + "CM": "Cameroon", + "CN": "China", + "CO": "Colombia", + "CP": "Clipperton Island", + "CQ": "Sark", + "CR": "Costa Rica", + "CU": "Cuba", + "CV": "Cape Verde", + "CW": "Curaçao", + "CX": "Christmas Island", + "CY": "Cyprus", + "CZ": "Czechia", + "DE": "Germany", + "DG": "Diego Garcia", + "DJ": "Djibouti", + "DK": "Denmark", + "DM": "Dominica", + "DO": "Dominican Republic", + "DZ": "Algeria", + "EA": "Ceuta & Melilla", + "EC": "Ecuador", + "EE": "Estonia", + "EG": "Egypt", + "EH": "Western Sahara", + "ER": "Eritrea", + "ES": "Spain", + "ET": "Ethiopia", + "EU": "European Union", + "EZ": "Eurozone", + "FI": "Finland", + "FJ": "Fiji", + "FK": "Falkland Islands", + "FM": "Micronesia", + "FO": "Faroe Islands", + "FR": "France", + "GA": "Gabon", + "GB": "United Kingdom", + "GD": "Grenada", + "GE": "Georgia", + "GF": "French Guiana", + "GG": "Guernsey", + "GH": "Ghana", + "GI": "Gibraltar", + "GL": "Greenland", + "GM": "Gambia", + "GN": "Guinea", + "GP": "Guadeloupe", + "GQ": "Equatorial Guinea", + "GR": "Greece", + "GS": "South Georgia & South Sandwich Islands", + "GT": "Guatemala", + "GU": "Guam", + "GW": "Guinea-Bissau", + "GY": "Guyana", + "HK": "Hong Kong SAR China", + "HM": "Heard & McDonald Islands", + "HN": "Honduras", + "HR": "Croatia", + "HT": "Haiti", + "HU": "Hungary", + "IC": "Canary Islands", + "ID": "Indonesia", + "IE": "Ireland", + "IL": "Israel", + "IM": "Isle of Man", + "IN": "India", + "IO": "British Indian Ocean Territory", + "IQ": "Iraq", + "IR": "Iran", + "IS": "Iceland", + "IT": "Italy", + "JE": "Jersey", + "JM": "Jamaica", + "JO": "Jordan", + "JP": "Japan", + "KE": "Kenya", + "KG": "Kyrgyzstan", + "KH": "Cambodia", + "KI": "Kiribati", + "KM": "Comoros", + "KN": "St. Kitts & Nevis", + "KP": "North Korea", + "KR": "South Korea", + "KW": "Kuwait", + "KY": "Cayman Islands", + "KZ": "Kazakhstan", + "LA": "Laos", + "LB": "Lebanon", + "LC": "St. Lucia", + "LI": "Liechtenstein", + "LK": "Sri Lanka", + "LR": "Liberia", + "LS": "Lesotho", + "LT": "Lithuania", + "LU": "Luxembourg", + "LV": "Latvia", + "LY": "Libya", + "MA": "Morocco", + "MC": "Monaco", + "MD": "Moldova", + "ME": "Montenegro", + "MF": "St. Martin", + "MG": "Madagascar", + "MH": "Marshall Islands", + "MK": "North Macedonia", + "ML": "Mali", + "MM": "Myanmar (Burma)", + "MN": "Mongolia", + "MO": "Macao SAR China", + "MP": "Northern Mariana Islands", + "MQ": "Martinique", + "MR": "Mauritania", + "MS": "Montserrat", + "MT": "Malta", + "MU": "Mauritius", + "MV": "Maldives", + "MW": "Malawi", + "MX": "Mexico", + "MY": "Malaysia", + "MZ": "Mozambique", + "NA": "Namibia", + "NC": "New Caledonia", + "NE": "Niger", + "NF": "Norfolk Island", + "NG": "Nigeria", + "NI": "Nicaragua", + "NL": "Netherlands", + "NO": "Norway", + "NP": "Nepal", + "NR": "Nauru", + "NU": "Niue", + "NZ": "New Zealand", + "OM": "Oman", + "PA": "Panama", + "PE": "Peru", + "PF": "French Polynesia", + "PG": "Papua New Guinea", + "PH": "Philippines", + "PK": "Pakistan", + "PL": "Poland", + "PM": "St. Pierre & Miquelon", + "PN": "Pitcairn Islands", + "PR": "Puerto Rico", + "PS": "Palestinian Territories", + "PT": "Portugal", + "PW": "Palau", + "PY": "Paraguay", + "QA": "Qatar", + "QO": "Outlying Oceania", + "RE": "Réunion", + "RO": "Romania", + "RS": "Serbia", + "RU": "Russia", + "RW": "Rwanda", + "SA": "Saudi Arabia", + "SB": "Solomon Islands", + "SC": "Seychelles", + "SD": "Sudan", + "SE": "Sweden", + "SG": "Singapore", + "SH": "St. Helena", + "SI": "Slovenia", + "SJ": "Svalbard & Jan Mayen", + "SK": "Slovakia", + "SL": "Sierra Leone", + "SM": "San Marino", + "SN": "Senegal", + "SO": "Somalia", + "SR": "Suriname", + "SS": "South Sudan", + "ST": "São Tomé & Príncipe", + "SV": "El Salvador", + "SX": "Sint Maarten", + "SY": "Syria", + "SZ": "Eswatini", + "TA": "Tristan da Cunha", + "TC": "Turks & Caicos Islands", + "TD": "Chad", + "TF": "French Southern Territories", + "TG": "Togo", + "TH": "Thailand", + "TJ": "Tajikistan", + "TK": "Tokelau", + "TL": "Timor-Leste", + "TM": "Turkmenistan", + "TN": "Tunisia", + "TO": "Tonga", + "TR": "Türkiye", + "TT": "Trinidad & Tobago", + "TV": "Tuvalu", + "TW": "Taiwan", + "TZ": "Tanzania", + "UA": "Ukraine", + "UG": "Uganda", + "UM": "U.S. Outlying Islands", + "UN": "United Nations", + "US": "United States", + "UY": "Uruguay", + "UZ": "Uzbekistan", + "VA": "Vatican City", + "VC": "St. Vincent & Grenadines", + "VE": "Venezuela", + "VG": "British Virgin Islands", + "VI": "U.S. Virgin Islands", + "VN": "Vietnam", + "VU": "Vanuatu", + "WF": "Wallis & Futuna", + "WS": "Samoa", + "XA": "Pseudo-Accents", + "XB": "Pseudo-Bidi", + "XK": "Kosovo", + "YE": "Yemen", + "YT": "Mayotte", + "ZA": "South Africa", + "ZM": "Zambia", + "ZW": "Zimbabwe", + "ZZ": "Unknown Region" + } + }, + "Title": { + "Strings": { + "": "Tsunami Message", + "WEAK51": "Tsunami Warning, Advisory, and Watch for Alaska, British Colombia, and US West Coast", + "WEAK53": "Tsunami Information Statement for Alaska, British Colombia, and US West Coast", + "WECA40": "Tsunami Warning, Advisory, and Watch for Puerto Rico and Virgin Islands", + "WECA41": "Tsunami Threat Message for Non US Caribbean", + "WECA42": "Tsunami Information Statement for Puerto Rico and Virgin Islands", + "WECA43": "Tsunami Information Statement for Non US Caribbean", + "WECA60": "Tsunami Warning, Advisory, and Watch for Puerto Rico and Virgin Islands", + "WEGM40": "Tsunami Warning, Advisory, and Watch for Guam and CNMI", + "WEGM42": "Tsunami Information Statement for Guam and CNMI", + "WEHW40": "Tsunami Warning, Advisory, and Watch for Hawaii", + "WEHW42": "Tsunami Information Statement for Hawaii", + "WEPA40": "Tsunami Threat Message for Non US Pacific", + "WEPA41": "Tsunami Warning, Advisory, and Watch for Alaska, British Colombia, and US West Coast", + "WEPA42": "Tsunami Information Statement for Non US Pacific", + "WEXX20": "Tsunami Warning, Advisory, and Watch for US Atlantic, Gulf of Mexico, and Canada", + "WEXX30": "Tsunami Warning, Advisory, and Watch for US Atlantic, Gulf of Mexico, and Canada", + "WEXX32": "Tsunami Information Statement for US Atlantic, Gulf of Mexico, and Canada", + "WEZS40": "Tsunami Warning, Advisory, and Watch for American Samoa", + "WEZS42": "Tsunami Information Statement for American Samoa" + } + } + } +} \ No newline at end of file diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.NOAA.TTS/und.json.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.NOAA.TTS/und.json.meta new file mode 100644 index 0000000..5d24f97 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.NOAA.TTS/und.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: cc92787cfd513fa4e88ca66143789b68 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.NOAA.TTS/yue.json b/Assets/StreamingAssets/Messages/Cryville.EEW.NOAA.TTS/yue.json new file mode 100644 index 0000000..f93a1a2 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.NOAA.TTS/yue.json @@ -0,0 +1,388 @@ +{ + "Culture": "yue-HK", + "Strings": { + "NoSegmentCategoryHeadline": "呢次地震造æˆå˜…海嘯å¨è„…å·²ç¶“çµæŸã€‚", + "PreliminarySeismicInformation": "å”調世界時{2},{1}ç™¼ç”Ÿæš«å®šè¦æ¨¡{0:F1}ç´šåœ°éœ‡ã€‚éœ‡æºæ·±åº¦{3}{4}。", + "RegionDelimiter": "。" + }, + "StringSets": { + "HypocenterDepthUnit": { + "Strings": { + "kilometers": "公里", + "miles": "å“©" + } + }, + "SegmentCategoryHeadlines": { + "Strings": { + "Cancellation": "以下地å€å˜…部分沿岸å€åŸŸç™¼ä½ˆå˜…海嘯警報等已被解除。\n{0}。", + "Information": "呢次地震å°{0}冇海嘯å¨è„…。", + "Potential Threat": "呢次地震å¯èƒ½æœƒå¼•發海嘯å°ä»¥ä¸‹åœ°å€å˜…部分沿岸å€åŸŸé€ æˆç½å®³ã€‚\n{0}。", + "Threat": "呢次地震å¯èƒ½æœƒå¼•發海嘯å°ä»¥ä¸‹åœ°å€å˜…部分沿岸å€åŸŸé€ æˆç½å®³ã€‚\n{0}。", + "0-0.3 meters": "以下地å€å˜…部分沿岸å€åŸŸé è¨ˆæµ·å˜¯æ³¢æµªé«˜æ–¼æ½®ä½0.3米以下。\n{0}。", + "0.3-1 meters": "以下地å€å˜…部分沿岸å€åŸŸå˜…海嘯波浪å¯èƒ½é«˜æ–¼æ½®ä½0.3到1米。\n{0}。", + "1-3 meters": "以下地å€å˜…部分沿岸å€åŸŸå˜…海嘯波浪å¯èƒ½é«˜æ–¼æ½®ä½1到3米。\n{0}。", + ">3.0 meters": "以下地å€å˜…部分沿岸å€åŸŸå˜…海嘯波浪å¯èƒ½é«˜æ–¼æ½®ä½3米以上。\n{0}。", + "Watch": "以下地å€å˜…部分沿岸å€åŸŸæ­£åœ¨ç™¼ä½ˆæµ·å˜¯è§€å¯Ÿå ±ã€‚\n{0}。", + "Advisory": "以下地å€å˜…部分沿岸å€åŸŸæ­£åœ¨ç™¼ä½ˆæµ·å˜¯æ³¨æ„報。\n{0}。", + "Warning": "以下地å€å˜…部分沿岸å€åŸŸæ­£åœ¨ç™¼ä½ˆæµ·å˜¯è­¦å ±ã€‚\n{0}。" + } + }, + "States": { + "Strings": { + "AK": "阿拉斯加", + "AL": "阿拉巴馬", + "AS": "美屬薩摩亞", + "CA": "加利ç¦å°¼äºž", + "CT": "康涅狄格", + "DC": "è¯ç››é “特å€", + "DE": "特拉è¯", + "FL": "佛羅里é”", + "FM": "密克羅尼西亞è¯é‚¦", + "GA": "使²»äºž", + "GU": "關島", + "HI": "å¤å¨å¤·", + "LA": "路易斯安那", + "MA": "麻çœ", + "MD": "馬利蘭", + "ME": "緬因", + "MH": "馬紹爾群島", + "MP": "北馬里亞ç´ç¾¤å³¶", + "MS": "密西西比", + "NC": "北å¡ç¾…èŠç´", + "NH": "新罕布什爾", + "NJ": "新澤西", + "NY": "ç´ç´„", + "OR": "俄勒岡", + "PR": "波多黎å„", + "PW": "帕勞", + "RI": "ç¾…å¾·å³¶", + "SC": "å—å¡ç¾…èŠç´", + "TX": "å¾·è–©æ–¯", + "VA": "ç¶­ç尼亞", + "VI": "美屬維爾京群島", + "WA": "è¯ç››é “" + } + }, + "TargetRegion": { + "Strings": { + "": "䏿˜Žåœ°å€", + "WEAK": "阿拉斯加ã€å‘è©©åŒç¾Žåœ‹æœ¬åœŸè¥¿å²¸", + "WECA": "美國本土外加勒比海沿岸", + "WECA40": "波多黎å„åŒè™•女群島", + "WECA42": "波多黎å„åŒè™•女群島", + "WECA60": "波多黎å„åŒè™•女群島", + "WEGM": "關島åŒåŒ—馬里亞ç´ç¾¤å³¶", + "WEHW": "å¤å¨å¤·", + "WEPA": "美國本土外環太平洋沿岸", + "WEPA41": "阿拉斯加ã€å‘è©©åŒç¾Žåœ‹æœ¬åœŸè¥¿å²¸", + "WEXX": "美國本土大西洋沿岸ã€å¢¨è¥¿å“¥ç£åŒåŠ æ‹¿å¤§", + "WEZS": "美屬薩摩亞" + } + }, + "Territories": { + "Strings": { + "Chuuk": "丘克", + "Hawaii": "å¤å¨å¤·", + "Howland and Baker": "豪蘭和è²å…‹ç¾¤å³¶", + "Jarvis Island": "賈維斯島", + "Johnston Atoll": "約翰斯頓環ç¤", + "Kermadec Islands": "克馬德克群島", + "Kosrae": "庫賽埃", + "Midway Island": "中途島", + "Palmyra Island": "叕邿‹‰ç’°ç¤", + "Pohnpei": "æ³¢ç´ä½©", + "Wake Island": "å¨å…‹å³¶", + "Yap": "雅浦", + "Saba and Saint Eustatius": "è–©å·´å’Œè–尤斯特歇斯", + "San Andres and Providencia": "è–安德烈斯島和普羅維登西亞島", + "AC": "阿森æ¾å³¶", + "AD": "安é“爾", + "AE": "阿拉伯è¯åˆå¤§å…¬åœ‹", + "AF": "阿富汗", + "AG": "安æç“œåŒå·´å¸ƒé”", + "AI": "安圭拉", + "AL": "阿爾巴尼亞", + "AM": "亞美尼亞", + "AO": "安哥拉", + "AQ": "å—æ¥µæ´²", + "AR": "阿根廷", + "AS": "美屬薩摩亞", + "AT": "奧地利", + "AU": "澳洲", + "AW": "è·å±¬é˜¿é­¯å·´", + "AX": "奧蘭群島", + "AZ": "亞塞拜然", + "BA": "波斯尼亞åŒé»‘塞哥維那", + "BB": "å·´è²å¤š", + "BD": "孟加拉", + "BE": "比利時", + "BF": "布å‰ç´æ³•ç´¢", + "BG": "ä¿åŠ åˆ©äºž", + "BH": "å·´æž—", + "BI": "蒲隆地", + "BJ": "è²å—", + "BL": "è–巴瑟米", + "BM": "百慕é”", + "BN": "æ±¶èŠ", + "BO": "玻利維亞", + "BQ": "è·è˜­åŠ å‹’æ¯”å€", + "BR": "巴西", + "BS": "巴哈馬", + "BT": "ä¸ä¸¹", + "BV": "布å¨å³¶", + "BW": "波札那", + "BY": "白俄羅斯", + "BZ": "è²é‡Œæ–¯", + "CA": "加拿大", + "CC": "科科斯(基林)群島", + "CD": "å‰›æžœï¼ˆé‡‘å¤æ²™ï¼‰", + "CF": "中éžå…±å’Œåœ‹", + "CG": "剛果(布拉薩)", + "CH": "瑞士", + "CI": "象牙海岸", + "CK": "庫克群島", + "CL": "智利", + "CM": "喀麥隆", + "CN": "中è¯äººæ°‘共和國", + "CO": "哥倫比亞", + "CP": "克里派頓島", + "CR": "哥斯大黎加", + "CU": "å¤å·´", + "CV": "ç¶­å¾·è§’", + "CW": "庫拉索", + "CX": "è–誕島", + "CY": "賽普勒斯", + "CZ": "æ·å…‹", + "DE": "德國", + "DG": "迪亞哥加西亞島", + "DJ": "å‰å¸ƒåœ°", + "DK": "丹麥", + "DM": "多米尼克", + "DO": "多明尼加共和國", + "DZ": "阿爾åŠåˆ©äºž", + "EA": "休é”與梅利利亞", + "EC": "厄瓜多", + "EE": "愛沙尼亞", + "EG": "埃åŠ", + "EH": "西撒哈拉", + "ER": "厄利垂亞", + "ES": "西ç­ç‰™", + "ET": "衣索比亞", + "EU": "æ­ç›Ÿ", + "EZ": "æ­å…ƒå€", + "FI": "芬蘭", + "FJ": "æ–æ¿Ÿ", + "FK": "ç¦å…‹è˜­ç¾¤å³¶", + "FM": "密克羅尼西亞群島", + "FO": "法羅群島", + "FR": "法國", + "GA": "加彭", + "GB": "英國", + "GD": "格瑞那é”", + "GE": "喬治亞共和國", + "GF": "法屬圭亞那", + "GG": "根西島", + "GH": "迦ç´", + "GI": "直布羅陀", + "GL": "格陵蘭", + "GM": "甘比亞", + "GN": "幾內亞", + "GP": "瓜地洛普", + "GQ": "赤é“幾內亞", + "GR": "希臘", + "GS": "å—使²»äºžå³¶åŒå—æ¡‘å¨å¥‡ç¾¤å³¶", + "GT": "瓜地馬拉", + "GU": "關島", + "GW": "幾內亞比索", + "GY": "蓋亞那", + "HK": "中è¯äººæ°‘共和國香港特別行政å€", + "HM": "赫德島åŒéº¥å…‹å”ç´ç¾¤å³¶", + "HN": "å®éƒ½æ‹‰æ–¯", + "HR": "克羅埃西亞", + "HT": "海地", + "HU": "匈牙利", + "IC": "加那利群島", + "ID": "å°å°¼", + "IE": "愛爾蘭", + "IL": "以色列", + "IM": "曼島", + "IN": "å°åº¦", + "IO": "英屬å°åº¦æ´‹é ˜åœ°", + "IQ": "伊拉克", + "IR": "伊朗", + "IS": "冰島", + "IT": "義大利", + "JE": "澤西島", + "JM": "牙買加", + "JO": "ç´„æ—¦", + "JP": "日本", + "KE": "肯亞", + "KG": "å‰çˆ¾å‰æ–¯", + "KH": "柬埔寨", + "KI": "å‰é‡Œå·´æ–¯", + "KM": "葛摩", + "KN": "è–基茨åŒå°¼ç¶­æ–¯", + "KP": "北韓", + "KR": "å—韓", + "KW": "ç§‘å¨ç‰¹", + "KY": "開曼群島", + "KZ": "哈薩克", + "LA": "寮國", + "LB": "黎巴嫩", + "LC": "è–露西亞", + "LI": "列支敦斯登", + "LK": "斯里蘭å¡", + "LR": "賴比瑞亞", + "LS": "賴索托", + "LT": "ç«‹é™¶å®›", + "LU": "盧森堡", + "LV": "拉脫維亞", + "LY": "利比亞", + "MA": "摩洛哥", + "MC": "æ‘©ç´å“¥", + "MD": "摩爾多瓦", + "ME": "蒙特內哥羅", + "MF": "法屬è–馬ä¸", + "MG": "馬é”加斯加", + "MH": "馬紹爾群島", + "MK": "北馬其頓", + "ML": "馬利", + "MM": "緬甸", + "MN": "è’™å¤", + "MO": "中è¯äººæ°‘共和國澳門特別行政å€", + "MP": "北馬里亞ç´ç¾¤å³¶", + "MQ": "馬ä¸å°¼å…‹å³¶", + "MR": "茅利塔尼亞", + "MS": "蒙哲臘", + "MT": "馬爾他", + "MU": "模里西斯", + "MV": "馬爾地夫", + "MW": "馬拉å¨", + "MX": "墨西哥", + "MY": "馬來西亞", + "MZ": "莫三比克", + "NA": "ç´ç±³æ¯”亞", + "NC": "新喀里多尼亞", + "NE": "尼日", + "NF": "諾ç¦å…‹å³¶", + "NG": "奈åŠåˆ©äºž", + "NI": "尼加拉瓜", + "NL": "è·è˜­", + "NO": "挪å¨", + "NP": "尼泊爾", + "NR": "諾魯", + "NU": "ç´åŸƒå³¶", + "NZ": "ç´è¥¿è˜­", + "OM": "阿曼王國", + "PA": "巴拿馬", + "PE": "秘魯", + "PF": "法屬玻里尼西亞", + "PG": "巴布亞ç´å¹¾å…§äºž", + "PH": "è²å¾‹è³“", + "PK": "巴基斯å¦", + "PL": "波蘭", + "PM": "è–皮埃爾åŒå¯†å…‹éš†ç¾¤å³¶", + "PN": "皮特肯群島", + "PR": "波多黎å„", + "PS": "å·´å‹’æ–¯å¦è‡ªæ²»å€", + "PT": "è‘¡è„牙", + "PW": "帛ç‰", + "PY": "巴拉圭", + "QA": "å¡é”", + "QO": "大洋洲邊疆群島", + "RE": "留尼旺", + "RO": "羅馬尼亞", + "RS": "塞爾維亞", + "RU": "ä¿„ç¾…æ–¯", + "RW": "盧安é”", + "SA": "æ²™çƒåœ°é˜¿æ‹‰ä¼¯", + "SB": "索羅門群島", + "SC": "塞席爾", + "SD": "蘇丹", + "SE": "瑞典", + "SG": "新加å¡", + "SH": "è–赫勒拿島", + "SI": "斯洛維尼亞", + "SJ": "æ–¯ç“¦çˆ¾å·´ç‰¹ç¾¤å³¶åŒæšé¦¬å»¶å³¶", + "SK": "斯洛ä¼å…‹", + "SL": "ç…å­å±±", + "SM": "è–馬利諾", + "SN": "塞內加爾", + "SO": "索馬利亞", + "SR": "蘇利å—", + "SS": "å—蘇丹", + "ST": "è–å¤šç¾ŽåŒæ™®æž—西比", + "SV": "薩爾瓦多", + "SX": "è·å±¬è–馬ä¸", + "SY": "敘利亞", + "SZ": "å²ç“¦æ¿Ÿè˜­", + "TA": "特里斯å¦é”庫尼亞群島", + "TC": "土克斯åŠé–‹ç§‘斯群島", + "TD": "查德", + "TF": "æ³•å±¬å—æ–¹å±¬åœ°", + "TG": "多哥", + "TH": "泰國", + "TJ": "å¡”å‰å…‹", + "TK": "托克勞群島", + "TL": "æ±å¸æ±¶", + "TM": "土庫曼", + "TN": "çªå°¼è¥¿äºž", + "TO": "æ±åŠ ", + "TR": "土耳其", + "TT": "åƒé‡Œé”åŒå¤šå·´å“¥", + "TV": "å瓦魯", + "TW": "å°ç£", + "TZ": "å¦å°šå°¼äºž", + "UA": "çƒå…‹è˜­", + "UG": "çƒå¹²é”", + "UM": "美國本土外å°å³¶å¶¼", + "UN": "è¯åˆåœ‹", + "US": "美國", + "UY": "çƒæ‹‰åœ­", + "UZ": "çƒèŒ²åˆ¥å…‹", + "VA": "梵蒂岡", + "VC": "è–æ–‡æ£®ç‰¹åŒæ ¼æž—ç´ä¸æ–¯", + "VE": "委內瑞拉", + "VG": "英屬處女群島", + "VI": "美屬處女群島", + "VN": "è¶Šå—", + "VU": "è¬é‚£æœ", + "WF": "瓦利斯åŒå¯Œåœ–ç´ç¾¤å³¶", + "WS": "薩摩亞", + "XA": "å½å£éŸ³", + "XB": "å½ Bidi", + "XK": "科索沃", + "YE": "葉門", + "YT": "馬約特", + "ZA": "å—éž", + "ZM": "尚比亞", + "ZW": "辛巴å¨", + "ZZ": "未知å€åŸŸ" + } + }, + "Title": { + "Strings": { + "": "海嘯消æ¯", + "WEAK51": "阿拉斯加ã€å‘è©©ã€ç¾Žåœ‹æœ¬åœŸè¥¿å²¸æµ·å˜¯è­¦å ±ã€æ³¨æ„å ±ã€è§€å¯Ÿå ±", + "WEAK53": "阿拉斯加ã€å‘è©©ã€ç¾Žåœ‹æœ¬åœŸè¥¿å²¸æµ·å˜¯è³‡è¨Šèª¬æ˜Ž", + "WECA40": "波多黎å„åŒè™•å¥³ç¾¤å³¶æµ·å˜¯è­¦å ±ã€æ³¨æ„å ±ã€è§€å¯Ÿå ±", + "WECA41": "美國本土外加勒比海沿岸海嘯å¨è„…消æ¯", + "WECA42": "波多黎å„åŒè™•女群島海嘯資訊説明", + "WECA43": "美國本土外加勒比海沿岸海嘯資訊説明", + "WECA60": "波多黎å„åŒè™•å¥³ç¾¤å³¶æµ·å˜¯è­¦å ±ã€æ³¨æ„å ±ã€è§€å¯Ÿå ±", + "WEGM40": "關島åŒåŒ—馬里亞ç´ç¾¤å³¶æµ·å˜¯è­¦å ±ã€æ³¨æ„å ±ã€è§€å¯Ÿå ±", + "WEGM42": "關島åŒåŒ—馬里亞ç´ç¾¤å³¶æµ·å˜¯è³‡è¨Šèª¬æ˜Ž", + "WEHW40": "å¤å¨å¤·æµ·å˜¯è­¦å ±ã€æ³¨æ„å ±ã€è§€å¯Ÿå ±", + "WEHW42": "å¤å¨å¤·æµ·å˜¯è³‡è¨Šèª¬æ˜Ž", + "WEPA40": "美國本土外環太平洋沿岸海嘯å¨è„…消æ¯", + "WEPA41": "阿拉斯加ã€å‘è©©ã€ç¾Žåœ‹æœ¬åœŸè¥¿å²¸æµ·å˜¯è­¦å ±ã€æ³¨æ„å ±ã€è§€å¯Ÿå ±", + "WEPA42": "美國本土外環太平洋沿岸海嘯資訊説明", + "WEXX20": "美國本土大西洋沿岸ã€å¢¨è¥¿å“¥ç£ã€åŠ æ‹¿å¤§æµ·å˜¯è­¦å ±ã€æ³¨æ„å ±ã€è§€å¯Ÿå ±", + "WEXX30": "美國本土大西洋沿岸ã€å¢¨è¥¿å“¥ç£ã€åŠ æ‹¿å¤§æµ·å˜¯è­¦å ±ã€æ³¨æ„å ±ã€è§€å¯Ÿå ±", + "WEXX32": "美國本土大西洋沿岸ã€å¢¨è¥¿å“¥ç£ã€åŠ æ‹¿å¤§æµ·å˜¯è³‡è¨Šèª¬æ˜Ž", + "WEZS40": "ç¾Žå±¬è–©æ‘©äºžæµ·å˜¯è­¦å ±ã€æ³¨æ„å ±ã€è§€å¯Ÿå ±", + "WEZS42": "美屬薩摩亞海嘯資訊説明" + } + } + } +} \ No newline at end of file diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.NOAA.TTS/yue.json.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.NOAA.TTS/yue.json.meta new file mode 100644 index 0000000..e2e2007 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.NOAA.TTS/yue.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 03d1840e3471ee647bb5aacafeaa84de +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.NOAA.TTS/zh-Hant.json b/Assets/StreamingAssets/Messages/Cryville.EEW.NOAA.TTS/zh-Hant.json new file mode 100644 index 0000000..37bd693 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.NOAA.TTS/zh-Hant.json @@ -0,0 +1,388 @@ +{ + "Culture": "zh-TW", + "Strings": { + "NoSegmentCategoryHeadline": "本次地震造æˆçš„æµ·å˜¯å¨è„…å·²çµæŸã€‚", + "PreliminarySeismicInformation": "世界å”調時間{2},{1}ç™¼ç”Ÿæš«å®šè¦æ¨¡{0:F1}ç´šåœ°éœ‡ã€‚éœ‡æºæ·±åº¦{3}{4}。", + "RegionDelimiter": "。" + }, + "StringSets": { + "HypocenterDepthUnit": { + "Strings": { + "kilometers": "公里", + "miles": "英里" + } + }, + "SegmentCategoryHeadlines": { + "Strings": { + "Cancellation": "以下地å€çš„部分沿岸å€åŸŸç™¼ä½ˆçš„æµ·å˜¯è­¦å ±ç­‰å·²è¢«è§£é™¤ã€‚\n{0}。", + "Information": "本次地震å°{0}沒有海嘯å¨è„…。", + "Potential Threat": "本次地震å¯èƒ½æœƒå¼•發海嘯å°ä»¥ä¸‹åœ°å€çš„部分沿岸å€åŸŸé€ æˆç½å®³ã€‚\n{0}。", + "Threat": "本次地震å¯èƒ½æœƒå¼•發海嘯å°ä»¥ä¸‹åœ°å€çš„部分沿岸å€åŸŸé€ æˆç½å®³ã€‚\n{0}。", + "0-0.3 meters": "以下地å€çš„部分沿岸å€åŸŸé è¨ˆæµ·å˜¯æ³¢æµªé«˜æ–¼æ½®ä½0.3公尺以下。\n{0}。", + "0.3-1 meters": "以下地å€çš„部分沿岸å€åŸŸçš„æµ·å˜¯æ³¢æµªå¯èƒ½é«˜æ–¼æ½®ä½0.3到1公尺。\n{0}。", + "1-3 meters": "以下地å€çš„部分沿岸å€åŸŸçš„æµ·å˜¯æ³¢æµªå¯èƒ½é«˜æ–¼æ½®ä½1到3公尺。\n{0}。", + ">3.0 meters": "以下地å€çš„部分沿岸å€åŸŸçš„æµ·å˜¯æ³¢æµªå¯èƒ½é«˜æ–¼æ½®ä½3公尺以上。\n{0}。", + "Watch": "以下地å€çš„部分沿岸å€åŸŸæ­£åœ¨ç™¼ä½ˆæµ·å˜¯è§€å¯Ÿå ±ã€‚\n{0}。", + "Advisory": "以下地å€çš„部分沿岸å€åŸŸæ­£åœ¨ç™¼ä½ˆæµ·å˜¯æ³¨æ„報。\n{0}。", + "Warning": "以下地å€çš„部分沿岸å€åŸŸæ­£åœ¨ç™¼ä½ˆæµ·å˜¯è­¦å ±ã€‚\n{0}。" + } + }, + "States": { + "Strings": { + "AK": "阿拉斯加", + "AL": "阿拉巴馬", + "AS": "美屬薩摩亞", + "CA": "加利ç¦å°¼äºž", + "CT": "康乃狄克", + "DC": "è¯ç››é “特å€", + "DE": "德拉瓦", + "FL": "佛羅里é”", + "FM": "密克羅尼西亞è¯é‚¦", + "GA": "喬治亞", + "GU": "關島", + "HI": "å¤å¨å¤·", + "LA": "路易斯安那", + "MA": "麻薩諸塞", + "MD": "馬里蘭", + "ME": "緬因", + "MH": "馬紹爾群島", + "MP": "北馬里亞ç´ç¾¤å³¶", + "MS": "密西西比", + "NC": "北å¡ç¾…來ç´", + "NH": "新罕布å¤", + "NJ": "ç´æ¾¤è¥¿", + "NY": "ç´ç´„", + "OR": "奧勒岡", + "PR": "波多黎å„", + "PW": "帛ç‰", + "RI": "ç¾…å¾·å³¶", + "SC": "å—å¡ç¾…來ç´", + "TX": "å¾·å…‹è–©æ–¯", + "VA": "ç¶­å‰å°¼äºž", + "VI": "美屬維京群島", + "WA": "è¯ç››é “" + } + }, + "TargetRegion": { + "Strings": { + "": "䏿˜Žåœ°å€", + "WEAK": "阿拉斯加ã€è‹±å±¬å“¥å€«æ¯”亞和美國本土西岸", + "WECA": "美國本土外加勒比海沿岸", + "WECA40": "波多黎å„和維京群島", + "WECA42": "波多黎å„和維京群島", + "WECA60": "波多黎å„和維京群島", + "WEGM": "關島和北馬里亞ç´ç¾¤å³¶", + "WEHW": "å¤å¨å¤·", + "WEPA": "美國本土外環太平洋沿岸", + "WEPA41": "阿拉斯加ã€è‹±å±¬å“¥å€«æ¯”亞和美國本土西岸", + "WEXX": "美國本土大西洋沿岸ã€å¢¨è¥¿å“¥ç£å’ŒåŠ æ‹¿å¤§", + "WEZS": "美屬薩摩亞" + } + }, + "Territories": { + "Strings": { + "Chuuk": "丘克", + "Hawaii": "å¤å¨å¤·", + "Howland and Baker": "豪蘭和è²å…‹ç¾¤å³¶", + "Jarvis Island": "賈維斯島", + "Johnston Atoll": "強斯頓環ç¤", + "Kermadec Islands": "克馬德克群島", + "Kosrae": "科斯雷", + "Midway Island": "中途島", + "Palmyra Island": "巴美拉環ç¤", + "Pohnpei": "æ³¢ç´ä½©", + "Wake Island": "å¨å…‹å³¶", + "Yap": "雅浦", + "Saba and Saint Eustatius": "è·å±¬æ²™å·´å’Œè–佑é”修斯", + "San Andres and Providencia": "è–安德烈斯島和普羅維登西亞島", + "AC": "阿森æ¾å³¶", + "AD": "安é“爾", + "AE": "阿拉伯è¯åˆå¤§å…¬åœ‹", + "AF": "阿富汗", + "AG": "安地å¡åŠå·´å¸ƒé”", + "AI": "安奎拉", + "AL": "阿爾巴尼亞", + "AM": "亞美尼亞", + "AO": "安哥拉", + "AQ": "å—æ¥µæ´²", + "AR": "阿根廷", + "AS": "美屬薩摩亞", + "AT": "奧地利", + "AU": "澳洲", + "AW": "è·å±¬é˜¿é­¯å·´", + "AX": "奧蘭群島", + "AZ": "亞塞拜然", + "BA": "波士尼亞與赫塞哥維ç´", + "BB": "å·´è²å¤š", + "BD": "孟加拉", + "BE": "比利時", + "BF": "布å‰ç´æ³•ç´¢", + "BG": "ä¿åŠ åˆ©äºž", + "BH": "å·´æž—", + "BI": "蒲隆地", + "BJ": "è²å—", + "BL": "è–巴瑟米", + "BM": "百慕é”", + "BN": "æ±¶èŠ", + "BO": "玻利維亞", + "BQ": "è·è˜­åŠ å‹’æ¯”å€", + "BR": "巴西", + "BS": "巴哈馬", + "BT": "ä¸ä¸¹", + "BV": "布å¨å³¶", + "BW": "波札那", + "BY": "白俄羅斯", + "BZ": "è²é‡Œæ–¯", + "CA": "加拿大", + "CC": "科克斯(基éˆï¼‰ç¾¤å³¶", + "CD": "å‰›æžœï¼ˆé‡‘å¤æ²™ï¼‰", + "CF": "中éžå…±å’Œåœ‹", + "CG": "剛果(布拉薩)", + "CH": "瑞士", + "CI": "象牙海岸", + "CK": "庫克群島", + "CL": "智利", + "CM": "喀麥隆", + "CN": "中國", + "CO": "哥倫比亞", + "CP": "克里派頓島", + "CR": "哥斯大黎加", + "CU": "å¤å·´", + "CV": "ç¶­å¾·è§’", + "CW": "庫拉索", + "CX": "è–誕島", + "CY": "賽普勒斯", + "CZ": "æ·å…‹", + "DE": "德國", + "DG": "迪亞哥加西亞島", + "DJ": "å‰å¸ƒåœ°", + "DK": "丹麥", + "DM": "多米尼克", + "DO": "多明尼加共和國", + "DZ": "阿爾åŠåˆ©äºž", + "EA": "休é”與梅利利亞", + "EC": "厄瓜多", + "EE": "愛沙尼亞", + "EG": "埃åŠ", + "EH": "西撒哈拉", + "ER": "厄利垂亞", + "ES": "西ç­ç‰™", + "ET": "衣索比亞", + "EU": "æ­ç›Ÿ", + "EZ": "æ­å…ƒå€", + "FI": "芬蘭", + "FJ": "æ–æ¿Ÿ", + "FK": "ç¦å…‹è˜­ç¾¤å³¶", + "FM": "密克羅尼西亞", + "FO": "法羅群島", + "FR": "法國", + "GA": "加彭", + "GB": "英國", + "GD": "格瑞那é”", + "GE": "喬治亞", + "GF": "法屬圭亞那", + "GG": "æ ¹æ¯", + "GH": "迦ç´", + "GI": "直布羅陀", + "GL": "格陵蘭", + "GM": "甘比亞", + "GN": "幾內亞", + "GP": "瓜地洛普", + "GQ": "赤é“幾內亞", + "GR": "希臘", + "GS": "å—喬治亞與å—三明治群島", + "GT": "瓜地馬拉", + "GU": "關島", + "GW": "幾內亞比索", + "GY": "蓋亞那", + "HK": "中國香港特別行政å€", + "HM": "赫德島åŠéº¥å”ç´ç¾¤å³¶", + "HN": "å®éƒ½æ‹‰æ–¯", + "HR": "克羅埃西亞", + "HT": "海地", + "HU": "匈牙利", + "IC": "加那利群島", + "ID": "å°å°¼", + "IE": "愛爾蘭", + "IL": "以色列", + "IM": "曼島", + "IN": "å°åº¦", + "IO": "英屬å°åº¦æ´‹é ˜åœ°", + "IQ": "伊拉克", + "IR": "伊朗", + "IS": "冰島", + "IT": "義大利", + "JE": "澤西島", + "JM": "牙買加", + "JO": "ç´„æ—¦", + "JP": "日本", + "KE": "肯亞", + "KG": "å‰çˆ¾å‰æ–¯", + "KH": "柬埔寨", + "KI": "å‰é‡Œå·´æ–¯", + "KM": "葛摩", + "KN": "è–克里斯多ç¦åŠå°¼ç¶­æ–¯", + "KP": "北韓", + "KR": "å—韓", + "KW": "ç§‘å¨ç‰¹", + "KY": "開曼群島", + "KZ": "哈薩克", + "LA": "寮國", + "LB": "黎巴嫩", + "LC": "è–露西亞", + "LI": "列支敦斯登", + "LK": "斯里蘭å¡", + "LR": "賴比瑞亞", + "LS": "賴索托", + "LT": "ç«‹é™¶å®›", + "LU": "盧森堡", + "LV": "拉脫維亞", + "LY": "利比亞", + "MA": "摩洛哥", + "MC": "æ‘©ç´å“¥", + "MD": "摩爾多瓦", + "ME": "蒙特內哥羅", + "MF": "法屬è–馬ä¸", + "MG": "馬é”加斯加", + "MH": "馬紹爾群島", + "MK": "北馬其頓", + "ML": "馬利", + "MM": "緬甸", + "MN": "è’™å¤", + "MO": "中國澳門特別行政å€", + "MP": "北馬利安ç´ç¾¤å³¶", + "MQ": "馬ä¸å°¼å…‹", + "MR": "茅利塔尼亞", + "MS": "蒙哲臘", + "MT": "馬爾他", + "MU": "模里西斯", + "MV": "馬爾地夫", + "MW": "馬拉å¨", + "MX": "墨西哥", + "MY": "馬來西亞", + "MZ": "莫三比克", + "NA": "ç´ç±³æ¯”亞", + "NC": "新喀里多尼亞", + "NE": "尼日", + "NF": "諾ç¦å…‹å³¶", + "NG": "奈åŠåˆ©äºž", + "NI": "尼加拉瓜", + "NL": "è·è˜­", + "NO": "挪å¨", + "NP": "尼泊爾", + "NR": "諾魯", + "NU": "ç´åŸƒå³¶", + "NZ": "ç´è¥¿è˜­", + "OM": "阿曼", + "PA": "巴拿馬", + "PE": "秘魯", + "PF": "法屬玻里尼西亞", + "PG": "巴布亞ç´å¹¾å…§äºž", + "PH": "è²å¾‹è³“", + "PK": "巴基斯å¦", + "PL": "波蘭", + "PM": "è–皮埃與密克隆群島", + "PN": "皮特肯群島", + "PR": "波多黎å„", + "PS": "å·´å‹’æ–¯å¦è‡ªæ²»å€", + "PT": "è‘¡è„牙", + "PW": "帛ç‰", + "PY": "巴拉圭", + "QA": "å¡é”", + "QO": "大洋洲邊疆群島", + "RE": "留尼旺", + "RO": "羅馬尼亞", + "RS": "塞爾維亞", + "RU": "ä¿„ç¾…æ–¯", + "RW": "盧安é”", + "SA": "æ²™çƒåœ°é˜¿æ‹‰ä¼¯", + "SB": "索羅門群島", + "SC": "塞席爾", + "SD": "蘇丹", + "SE": "瑞典", + "SG": "新加å¡", + "SH": "è–赫勒拿島", + "SI": "斯洛維尼亞", + "SJ": "挪å¨å±¬æ–¯ç“¦å·´åŠå°–棉", + "SK": "斯洛ä¼å…‹", + "SL": "ç…å­å±±", + "SM": "è–馬利諾", + "SN": "塞內加爾", + "SO": "索馬利亞", + "SR": "蘇利å—", + "SS": "å—蘇丹", + "ST": "è–多美普林西比", + "SV": "薩爾瓦多", + "SX": "è·å±¬è–馬ä¸", + "SY": "敘利亞", + "SZ": "å²ç“¦å¸å°¼", + "TA": "特里斯å¦é”庫尼亞群島", + "TC": "土克斯åŠé–‹ç§‘斯群島", + "TD": "查德", + "TF": "法屬å—部屬地", + "TG": "多哥", + "TH": "泰國", + "TJ": "å¡”å‰å…‹", + "TK": "托克勞群島", + "TL": "æ±å¸æ±¶", + "TM": "土庫曼", + "TN": "çªå°¼è¥¿äºž", + "TO": "æ±åŠ ", + "TR": "土耳其", + "TT": "åƒé‡Œé”åŠæ‰˜å·´å“¥", + "TV": "å瓦魯", + "TW": "å°ç£", + "TZ": "å¦å°šå°¼äºž", + "UA": "çƒå…‹è˜­", + "UG": "çƒå¹²é”", + "UM": "美國本土外å°å³¶å¶¼", + "UN": "è¯åˆåœ‹", + "US": "美國", + "UY": "çƒæ‹‰åœ­", + "UZ": "çƒèŒ²åˆ¥å…‹", + "VA": "梵蒂岡", + "VC": "è–æ–‡æ£®åŠæ ¼ç‘žé‚£ä¸", + "VE": "委內瑞拉", + "VG": "英屬維京群島", + "VI": "美屬維京群島", + "VN": "è¶Šå—", + "VU": "è¬é‚£æœ", + "WF": "瓦利斯群島和富圖那群島", + "WS": "薩摩亞", + "XA": "å½å€åŸŸ", + "XB": "彿¯”迪", + "XK": "科索沃", + "YE": "葉門", + "YT": "馬約特島", + "ZA": "å—éž", + "ZM": "尚比亞", + "ZW": "辛巴å¨", + "ZZ": "未知å€åŸŸ" + } + }, + "Title": { + "Strings": { + "": "海嘯消æ¯", + "WEAK51": "阿拉斯加ã€è‹±å±¬å“¥å€«æ¯”亞ã€ç¾Žåœ‹æœ¬åœŸè¥¿å²¸æµ·å˜¯è­¦å ±ã€æ³¨æ„å ±ã€è§€å¯Ÿå ±", + "WEAK53": "阿拉斯加ã€è‹±å±¬å“¥å€«æ¯”亞ã€ç¾Žåœ‹æœ¬åœŸè¥¿å²¸æµ·å˜¯è³‡è¨Šèª¬æ˜Ž", + "WECA40": "波多黎å„å’Œç¶­äº¬ç¾¤å³¶æµ·å˜¯è­¦å ±ã€æ³¨æ„å ±ã€è§€å¯Ÿå ±", + "WECA41": "美國本土外加勒比海沿岸海嘯å¨è„…消æ¯", + "WECA42": "波多黎å„和維京群島海嘯資訊説明", + "WECA43": "美國本土外加勒比海沿岸海嘯資訊説明", + "WECA60": "波多黎å„å’Œç¶­äº¬ç¾¤å³¶æµ·å˜¯è­¦å ±ã€æ³¨æ„å ±ã€è§€å¯Ÿå ±", + "WEGM40": "關島和北馬里亞ç´ç¾¤å³¶æµ·å˜¯è­¦å ±ã€æ³¨æ„å ±ã€è§€å¯Ÿå ±", + "WEGM42": "關島和北馬里亞ç´ç¾¤å³¶æµ·å˜¯è³‡è¨Šèª¬æ˜Ž", + "WEHW40": "å¤å¨å¤·æµ·å˜¯è­¦å ±ã€æ³¨æ„å ±ã€è§€å¯Ÿå ±", + "WEHW42": "å¤å¨å¤·æµ·å˜¯è³‡è¨Šèª¬æ˜Ž", + "WEPA40": "美國本土外環太平洋沿岸海嘯å¨è„…消æ¯", + "WEPA41": "阿拉斯加ã€è‹±å±¬å“¥å€«æ¯”亞ã€ç¾Žåœ‹æœ¬åœŸè¥¿å²¸æµ·å˜¯è­¦å ±ã€æ³¨æ„å ±ã€è§€å¯Ÿå ±", + "WEPA42": "美國本土外環太平洋沿岸海嘯資訊説明", + "WEXX20": "美國本土大西洋沿岸ã€å¢¨è¥¿å“¥ç£ã€åŠ æ‹¿å¤§æµ·å˜¯è­¦å ±ã€æ³¨æ„å ±ã€è§€å¯Ÿå ±", + "WEXX30": "美國本土大西洋沿岸ã€å¢¨è¥¿å“¥ç£ã€åŠ æ‹¿å¤§æµ·å˜¯è­¦å ±ã€æ³¨æ„å ±ã€è§€å¯Ÿå ±", + "WEXX32": "美國本土大西洋沿岸ã€å¢¨è¥¿å“¥ç£ã€åŠ æ‹¿å¤§æµ·å˜¯è³‡è¨Šèª¬æ˜Ž", + "WEZS40": "ç¾Žå±¬è–©æ‘©äºžæµ·å˜¯è­¦å ±ã€æ³¨æ„å ±ã€è§€å¯Ÿå ±", + "WEZS42": "美屬薩摩亞海嘯資訊説明" + } + } + } +} \ No newline at end of file diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.NOAA.TTS/zh-Hant.json.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.NOAA.TTS/zh-Hant.json.meta new file mode 100644 index 0000000..e8c849d --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.NOAA.TTS/zh-Hant.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: aefe56e032156564087a5793a8b21cba +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.NOAA.TTS/zh.json b/Assets/StreamingAssets/Messages/Cryville.EEW.NOAA.TTS/zh.json new file mode 100644 index 0000000..40c9e98 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.NOAA.TTS/zh.json @@ -0,0 +1,388 @@ +{ + "Culture": "zh-CN", + "Strings": { + "NoSegmentCategoryHeadline": "本次地震造æˆçš„æµ·å•¸å¨èƒå·²ç»“æŸã€‚", + "PreliminarySeismicInformation": "å调世界时{2},{1}å‘生暂定规模{0:F1}çº§åœ°éœ‡ã€‚éœ‡æºæ·±åº¦{3}{4}。", + "RegionDelimiter": "。" + }, + "StringSets": { + "HypocenterDepthUnit": { + "Strings": { + "kilometers": "åƒç±³", + "miles": "英里" + } + }, + "SegmentCategoryHeadlines": { + "Strings": { + "Cancellation": "以下地区的部分沿岸区域å‘布的海啸警报等已被解除。\n{0}。", + "Information": "本次地震对{0}没有海啸å¨èƒã€‚", + "Potential Threat": "本次地震å¯èƒ½ä¼šå¼•呿µ·å•¸å¯¹ä»¥ä¸‹åœ°åŒºçš„部分沿岸区域造æˆç¾å®³ã€‚\n{0}。", + "Threat": "本次地震å¯èƒ½ä¼šå¼•呿µ·å•¸å¯¹ä»¥ä¸‹åœ°åŒºçš„部分沿岸区域造æˆç¾å®³ã€‚\n{0}。", + "0-0.3 meters": "以下地区的部分沿岸区域预计海啸波浪高于潮ä½0.3米以下。\n{0}。", + "0.3-1 meters": "以下地区的部分沿岸区域的海啸波浪å¯èƒ½é«˜äºŽæ½®ä½0.3到1米。\n{0}。", + "1-3 meters": "以下地区的部分沿岸区域的海啸波浪å¯èƒ½é«˜äºŽæ½®ä½1到3米。\n{0}。", + ">3.0 meters": "以下地区的部分沿岸区域的海啸波浪å¯èƒ½é«˜äºŽæ½®ä½3米以上。\n{0}。", + "Watch": "以下地区的部分沿岸区域正在å‘布海啸观察报。\n{0}。", + "Advisory": "以下地区的部分沿岸区域正在å‘å¸ƒæµ·å•¸æ³¨æ„æŠ¥ã€‚\n{0}。", + "Warning": "以下地区的部分沿岸区域正在å‘布海啸警报。\n{0}。" + } + }, + "States": { + "Strings": { + "AK": "阿拉斯加", + "AL": "亚拉巴马", + "AS": "ç¾Žå±žè¨æ‘©äºš", + "CA": "加利ç¦å°¼äºš", + "CT": "康涅狄格", + "DC": "åŽç››é¡¿ç‰¹åŒº", + "DE": "特拉åŽ", + "FL": "佛罗里达", + "FM": "密克罗尼西亚è”邦", + "GA": "使²»äºš", + "GU": "关岛", + "HI": "å¤å¨å¤·", + "LA": "路易斯安那", + "MA": "马è¨è¯¸å¡ž", + "MD": "马里兰", + "ME": "ç¼…å› ", + "MH": "马ç»å°”群岛", + "MP": "北马里亚纳群岛", + "MS": "密西西比", + "NC": "北å¡ç½—æ¥çº³", + "NH": "新罕布什尔", + "NJ": "新泽西", + "NY": "纽约", + "OR": "俄勒冈", + "PR": "波多黎å„", + "PW": "帕劳", + "RI": "ç½—å¾—å²›", + "SC": "å—å¡ç½—æ¥çº³", + "TX": "å¾·å…‹è¨æ–¯", + "VA": "å¼—å‰å°¼äºš", + "VI": "美属维尔京群岛", + "WA": "åŽç››é¡¿" + } + }, + "TargetRegion": { + "Strings": { + "": "䏿˜Žåœ°åŒº", + "WEAK": "阿拉斯加ã€ä¸åˆ—颠哥伦比亚和美国本土西岸", + "WECA": "美国本土外加勒比海沿岸", + "WECA40": "波多黎å„和维尔京群岛", + "WECA42": "波多黎å„和维尔京群岛", + "WECA60": "波多黎å„和维尔京群岛", + "WEGM": "关岛和北马里亚纳群岛", + "WEHW": "å¤å¨å¤·", + "WEPA": "美国本土外环太平洋沿岸", + "WEPA41": "阿拉斯加ã€ä¸åˆ—颠哥伦比亚和美国本土西岸", + "WEXX": "美国本土大西洋沿岸ã€å¢¨è¥¿å“¥æ¹¾å’ŒåŠ æ‹¿å¤§", + "WEZS": "ç¾Žå±žè¨æ‘©äºš" + } + }, + "Territories": { + "Strings": { + "Chuuk": "丘克", + "Hawaii": "å¤å¨å¤·", + "Howland and Baker": "豪兰和è´å…‹ç¾¤å²›", + "Jarvis Island": "贾维斯岛", + "Johnston Atoll": "约翰斯顿环ç¤", + "Kermadec Islands": "克马德克群岛", + "Kosrae": "科斯雷", + "Midway Island": "中途岛", + "Palmyra Island": "巴尔米拉环ç¤", + "Pohnpei": "波纳佩", + "Wake Island": "å¨å…‹å²›", + "Yap": "雅浦", + "Saba and Saint Eustatius": "è¨å·´å’Œåœ£å°¤æ–¯ç‰¹æ­‡æ–¯", + "San Andres and Providencia": "圣安德列斯岛和普罗维登西亚岛", + "AC": "阿森æ¾å²›", + "AD": "安é“å°”", + "AE": "阿拉伯è”åˆé…‹é•¿å›½", + "AF": "阿富汗", + "AG": "安æç“œå’Œå·´å¸ƒè¾¾", + "AI": "安圭拉", + "AL": "阿尔巴尼亚", + "AM": "亚美尼亚", + "AO": "安哥拉", + "AQ": "å—æžæ´²", + "AR": "阿根廷", + "AS": "ç¾Žå±žè¨æ‘©äºš", + "AT": "奥地利", + "AU": "澳大利亚", + "AW": "阿é²å·´", + "AX": "奥兰群岛", + "AZ": "阿塞拜疆", + "BA": "波斯尼亚和黑塞哥维那", + "BB": "巴巴多斯", + "BD": "孟加拉国", + "BE": "比利时", + "BF": "布基纳法索", + "BG": "ä¿åŠ åˆ©äºš", + "BH": "å·´æž—", + "BI": "布隆迪", + "BJ": "è´å®", + "BL": "圣巴泰勒米", + "BM": "百慕大", + "BN": "文莱", + "BO": "玻利维亚", + "BQ": "è·å±žåŠ å‹’æ¯”åŒº", + "BR": "巴西", + "BS": "巴哈马", + "BT": "ä¸ä¸¹", + "BV": "布韦岛", + "BW": "åšèŒ¨ç“¦çº³", + "BY": "白俄罗斯", + "BZ": "伯利兹", + "CA": "加拿大", + "CC": "科科斯(基林)群岛", + "CD": "刚果(金)", + "CF": "中éžå…±å’Œå›½", + "CG": "刚果(布)", + "CH": "瑞士", + "CI": "科特迪瓦", + "CK": "库克群岛", + "CL": "智利", + "CM": "喀麦隆", + "CN": "中国", + "CO": "哥伦比亚", + "CP": "克利ç€é¡¿å²›", + "CR": "哥斯达黎加", + "CU": "å¤å·´", + "CV": "佛得角", + "CW": "库拉索", + "CX": "圣诞岛", + "CY": "塞浦路斯", + "CZ": "æ·å…‹", + "DE": "德国", + "DG": "迪戈加西亚岛", + "DJ": "å‰å¸ƒæ", + "DK": "丹麦", + "DM": "多米尼克", + "DO": "多米尼加共和国", + "DZ": "阿尔åŠåˆ©äºš", + "EA": "ä¼‘è¾¾åŠæ¢…利利亚", + "EC": "厄瓜多尔", + "EE": "爱沙尼亚", + "EG": "埃åŠ", + "EH": "西撒哈拉", + "ER": "厄立特里亚", + "ES": "西ç­ç‰™", + "ET": "埃塞俄比亚", + "EU": "欧盟", + "EZ": "欧元区", + "FI": "芬兰", + "FJ": "æ–æµŽ", + "FK": "ç¦å…‹å…°ç¾¤å²›", + "FM": "密克罗尼西亚", + "FO": "法罗群岛", + "FR": "法国", + "GA": "加蓬", + "GB": "英国", + "GD": "格林纳达", + "GE": "æ ¼é²å‰äºš", + "GF": "法属圭亚那", + "GG": "根西岛", + "GH": "加纳", + "GI": "直布罗陀", + "GL": "格陵兰", + "GM": "冈比亚", + "GN": "几内亚", + "GP": "瓜德罗普", + "GQ": "赤é“几内亚", + "GR": "希腊", + "GS": "å—ä¹”æ²»äºšå’Œå—æ¡‘å¨å¥‡ç¾¤å²›", + "GT": "å±åœ°é©¬æ‹‰", + "GU": "关岛", + "GW": "几内亚比ç»", + "GY": "圭亚那", + "HK": "中国香港特别行政区", + "HM": "赫德岛和麦克å”纳群岛", + "HN": "洪都拉斯", + "HR": "克罗地亚", + "HT": "海地", + "HU": "匈牙利", + "IC": "加纳利群岛", + "ID": "å°åº¦å°¼è¥¿äºš", + "IE": "爱尔兰", + "IL": "以色列", + "IM": "马æ©å²›", + "IN": "å°åº¦", + "IO": "英属å°åº¦æ´‹é¢†åœ°", + "IQ": "伊拉克", + "IR": "伊朗", + "IS": "冰岛", + "IT": "æ„大利", + "JE": "泽西岛", + "JM": "牙买加", + "JO": "约旦", + "JP": "日本", + "KE": "肯尼亚", + "KG": "å‰å°”剿–¯æ–¯å¦", + "KH": "柬埔寨", + "KI": "基里巴斯", + "KM": "ç§‘æ‘©ç½—", + "KN": "圣基茨和尼维斯", + "KP": "æœé²œ", + "KR": "韩国", + "KW": "ç§‘å¨ç‰¹", + "KY": "开曼群岛", + "KZ": "哈è¨å…‹æ–¯å¦", + "LA": "è€æŒ", + "LB": "黎巴嫩", + "LC": "圣å¢è¥¿äºš", + "LI": "列支敦士登", + "LK": "斯里兰å¡", + "LR": "利比里亚", + "LS": "莱索托", + "LT": "ç«‹é™¶å®›", + "LU": "墿£®å ¡", + "LV": "拉脱维亚", + "LY": "利比亚", + "MA": "摩洛哥", + "MC": "摩纳哥", + "MD": "摩尔多瓦", + "ME": "黑山", + "MF": "法属圣马ä¸", + "MG": "马达加斯加", + "MH": "马ç»å°”群岛", + "MK": "北马其顿", + "ML": "马里", + "MM": "缅甸", + "MN": "è’™å¤", + "MO": "中国澳门特别行政区", + "MP": "北马里亚纳群岛", + "MQ": "马æå°¼å…‹", + "MR": "毛里塔尼亚", + "MS": "蒙特塞拉特", + "MT": "马耳他", + "MU": "毛里求斯", + "MV": "马尔代夫", + "MW": "马拉维", + "MX": "墨西哥", + "MY": "马æ¥è¥¿äºš", + "MZ": "莫桑比克", + "NA": "纳米比亚", + "NC": "新喀里多尼亚", + "NE": "尼日尔", + "NF": "诺ç¦å…‹å²›", + "NG": "尼日利亚", + "NI": "尼加拉瓜", + "NL": "è·å…°", + "NO": "挪å¨", + "NP": "尼泊尔", + "NR": "ç‘™é²", + "NU": "纽埃", + "NZ": "新西兰", + "OM": "阿曼", + "PA": "巴拿马", + "PE": "秘é²", + "PF": "法属波利尼西亚", + "PG": "巴布亚新几内亚", + "PH": "è²å¾‹å®¾", + "PK": "巴基斯å¦", + "PL": "波兰", + "PM": "圣皮埃尔和密克隆群岛", + "PN": "皮特凯æ©ç¾¤å²›", + "PR": "波多黎å„", + "PS": "å·´å‹’æ–¯å¦é¢†åœŸ", + "PT": "è‘¡è„牙", + "PW": "帕劳", + "PY": "巴拉圭", + "QA": "å¡å¡”å°”", + "QO": "大洋洲边远群岛", + "RE": "留尼汪", + "RO": "罗马尼亚", + "RS": "塞尔维亚", + "RU": "ä¿„ç½—æ–¯", + "RW": "墿—ºè¾¾", + "SA": "沙特阿拉伯", + "SB": "所罗门群岛", + "SC": "塞舌尔", + "SD": "è‹ä¸¹", + "SE": "瑞典", + "SG": "新加å¡", + "SH": "圣赫勒拿", + "SI": "斯洛文尼亚", + "SJ": "斯瓦尔巴和扬马延", + "SK": "斯洛ä¼å…‹", + "SL": "塞拉利昂", + "SM": "圣马力诺", + "SN": "塞内加尔", + "SO": "索马里", + "SR": "è‹é‡Œå—", + "SS": "å—è‹ä¸¹", + "ST": "圣多美和普林西比", + "SV": "è¨å°”瓦多", + "SX": "è·å±žåœ£é©¬ä¸", + "SY": "å™åˆ©äºš", + "SZ": "æ–¯å¨å£«å…°", + "TA": "特里斯å¦-达库尼亚群岛", + "TC": "特克斯和凯科斯群岛", + "TD": "ä¹å¾—", + "TF": "法属å—部领地", + "TG": "多哥", + "TH": "泰国", + "TJ": "å¡”å‰å…‹æ–¯å¦", + "TK": "托克劳", + "TL": "ä¸œå¸æ±¶", + "TM": "土库曼斯å¦", + "TN": "çªå°¼æ–¯", + "TO": "汤加", + "TR": "土耳其", + "TT": "特立尼达和多巴哥", + "TV": "图瓦å¢", + "TW": "å°æ¹¾", + "TZ": "妿¡‘尼亚", + "UA": "乌克兰", + "UG": "乌干达", + "UM": "美国本土外å°å²›å±¿", + "UN": "è”åˆå›½", + "US": "美国", + "UY": "乌拉圭", + "UZ": "乌兹别克斯å¦", + "VA": "梵蒂冈", + "VC": "åœ£æ–‡æ£®ç‰¹å’Œæ ¼æž—çº³ä¸æ–¯", + "VE": "委内瑞拉", + "VG": "英属维尔京群岛", + "VI": "美属维尔京群岛", + "VN": "è¶Šå—", + "VU": "瓦努阿图", + "WF": "瓦利斯和富图纳", + "WS": "è¨æ‘©äºš", + "XA": "伪地区", + "XB": "伪åŒå‘语言地区", + "XK": "科索沃", + "YE": "也门", + "YT": "马约特", + "ZA": "å—éž", + "ZM": "赞比亚", + "ZW": "津巴布韦", + "ZZ": "未知地区" + } + }, + "Title": { + "Strings": { + "": "海啸消æ¯", + "WEAK51": "阿拉斯加ã€ä¸åˆ—颠哥伦比亚ã€ç¾Žå›½æœ¬åœŸè¥¿å²¸æµ·å•¸è­¦æŠ¥ã€æ³¨æ„报ã€è§‚察报", + "WEAK53": "阿拉斯加ã€ä¸åˆ—颠哥伦比亚ã€ç¾Žå›½æœ¬åœŸè¥¿å²¸æµ·å•¸ä¿¡æ¯è¯´æ˜Ž", + "WECA40": "波多黎å„å’Œç»´å°”äº¬ç¾¤å²›æµ·å•¸è­¦æŠ¥ã€æ³¨æ„报ã€è§‚察报", + "WECA41": "美国本土外加勒比海沿岸海啸å¨èƒæ¶ˆæ¯", + "WECA42": "波多黎å„和维尔京群岛海啸信æ¯è¯´æ˜Ž", + "WECA43": "美国本土外加勒比海沿岸海啸信æ¯è¯´æ˜Ž", + "WECA60": "波多黎å„å’Œç»´å°”äº¬ç¾¤å²›æµ·å•¸è­¦æŠ¥ã€æ³¨æ„报ã€è§‚察报", + "WEGM40": "å…³å²›å’ŒåŒ—é©¬é‡Œäºšçº³ç¾¤å²›æµ·å•¸è­¦æŠ¥ã€æ³¨æ„报ã€è§‚察报", + "WEGM42": "关岛和北马里亚纳群岛海啸信æ¯è¯´æ˜Ž", + "WEHW40": "å¤å¨å¤·æµ·å•¸è­¦æŠ¥ã€æ³¨æ„报ã€è§‚察报", + "WEHW42": "å¤å¨å¤·æµ·å•¸ä¿¡æ¯è¯´æ˜Ž", + "WEPA40": "美国本土外环太平洋沿岸海啸å¨èƒæ¶ˆæ¯", + "WEPA41": "阿拉斯加ã€ä¸åˆ—颠哥伦比亚ã€ç¾Žå›½æœ¬åœŸè¥¿å²¸æµ·å•¸è­¦æŠ¥ã€æ³¨æ„报ã€è§‚察报", + "WEPA42": "美国本土外环太平洋沿岸海啸信æ¯è¯´æ˜Ž", + "WEXX20": "美国本土大西洋沿岸ã€å¢¨è¥¿å“¥æ¹¾ã€åŠ æ‹¿å¤§æµ·å•¸è­¦æŠ¥ã€æ³¨æ„报ã€è§‚察报", + "WEXX30": "美国本土大西洋沿岸ã€å¢¨è¥¿å“¥æ¹¾ã€åŠ æ‹¿å¤§æµ·å•¸è­¦æŠ¥ã€æ³¨æ„报ã€è§‚察报", + "WEXX32": "美国本土大西洋沿岸ã€å¢¨è¥¿å“¥æ¹¾ã€åŠ æ‹¿å¤§æµ·å•¸ä¿¡æ¯è¯´æ˜Ž", + "WEZS40": "ç¾Žå±žè¨æ‘©äºšæµ·å•¸è­¦æŠ¥ã€æ³¨æ„报ã€è§‚察报", + "WEZS42": "ç¾Žå±žè¨æ‘©äºšæµ·å•¸ä¿¡æ¯è¯´æ˜Ž" + } + } + } +} \ No newline at end of file diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.NOAA.TTS/zh.json.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.NOAA.TTS/zh.json.meta new file mode 100644 index 0000000..a56b09e --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.NOAA.TTS/zh.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: c0a7e0fa18890fd45b9b4bc37e53d52d +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.NOAA.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.NOAA.meta new file mode 100644 index 0000000..d5a008e --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.NOAA.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7289743d9344f9b4e8a1bf54ee5377c7 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.NOAA/und.json b/Assets/StreamingAssets/Messages/Cryville.EEW.NOAA/und.json new file mode 100644 index 0000000..2db8fe4 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.NOAA/und.json @@ -0,0 +1,6 @@ +{ + "Culture": "en-US", + "Strings": { + "SourceName": "NOAA" + } +} \ No newline at end of file diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.NOAA/und.json.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.NOAA/und.json.meta new file mode 100644 index 0000000..9a790e0 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.NOAA/und.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 8f11817a0c7753d42ba6e3e6dfdc1024 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.NOAA/yue.json b/Assets/StreamingAssets/Messages/Cryville.EEW.NOAA/yue.json new file mode 100644 index 0000000..3b2e65f --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.NOAA/yue.json @@ -0,0 +1,6 @@ +{ + "Culture": "yue-HK", + "Strings": { + "SourceName": "NOAA" + } +} \ No newline at end of file diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.NOAA/yue.json.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.NOAA/yue.json.meta new file mode 100644 index 0000000..e2dc54a --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.NOAA/yue.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 9a0091b4e89852145b196efac743335b +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.NOAA/zh-Hant.json b/Assets/StreamingAssets/Messages/Cryville.EEW.NOAA/zh-Hant.json new file mode 100644 index 0000000..19ff07a --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.NOAA/zh-Hant.json @@ -0,0 +1,6 @@ +{ + "Culture": "zh-TW", + "Strings": { + "SourceName": "NOAA" + } +} \ No newline at end of file diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.NOAA/zh-Hant.json.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.NOAA/zh-Hant.json.meta new file mode 100644 index 0000000..0820645 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.NOAA/zh-Hant.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 2fa57785208f6c744824e7c45aa3b51f +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.NOAA/zh.json b/Assets/StreamingAssets/Messages/Cryville.EEW.NOAA/zh.json new file mode 100644 index 0000000..b142a75 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.NOAA/zh.json @@ -0,0 +1,6 @@ +{ + "Culture": "zh-CN", + "Strings": { + "SourceName": "NOAA" + } +} \ No newline at end of file diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.NOAA/zh.json.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.NOAA/zh.json.meta new file mode 100644 index 0000000..6ce4699 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.NOAA/zh.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: c9460e5317c8125499257fa223afb0b8 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.P2PQuake.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.P2PQuake.meta new file mode 100644 index 0000000..79ea156 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.P2PQuake.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 04c265355b02a924eb0c82f0d1be0676 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.P2PQuake/en.json b/Assets/StreamingAssets/Messages/Cryville.EEW.P2PQuake/en.json new file mode 100644 index 0000000..5ac5e5a --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.P2PQuake/en.json @@ -0,0 +1,6 @@ +{ + "Culture": "en-US", + "Strings": { + "SourceName": "P2PQuake" + } +} \ No newline at end of file diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.P2PQuake/en.json.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.P2PQuake/en.json.meta new file mode 100644 index 0000000..1ee2a08 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.P2PQuake/en.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 228c78ff7418ebc4d9a6b87592a90b82 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.P2PQuake/und.json b/Assets/StreamingAssets/Messages/Cryville.EEW.P2PQuake/und.json new file mode 100644 index 0000000..692143d --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.P2PQuake/und.json @@ -0,0 +1,6 @@ +{ + "Culture": "ja-JP", + "Strings": { + "SourceName": "P2P地震情報" + } +} \ No newline at end of file diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.P2PQuake/und.json.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.P2PQuake/und.json.meta new file mode 100644 index 0000000..585434f --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.P2PQuake/und.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: c0ddf089cc97f404584a4208053c1fc5 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.P2PQuake/yue.json b/Assets/StreamingAssets/Messages/Cryville.EEW.P2PQuake/yue.json new file mode 100644 index 0000000..cf1595b --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.P2PQuake/yue.json @@ -0,0 +1,6 @@ +{ + "Culture": "yue-HK", + "Strings": { + "SourceName": "P2P地震資訊" + } +} \ No newline at end of file diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.P2PQuake/yue.json.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.P2PQuake/yue.json.meta new file mode 100644 index 0000000..f1fbe83 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.P2PQuake/yue.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 9c44f369185730644b6e777e84ee0569 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.P2PQuake/zh-Hant.json b/Assets/StreamingAssets/Messages/Cryville.EEW.P2PQuake/zh-Hant.json new file mode 100644 index 0000000..2077c12 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.P2PQuake/zh-Hant.json @@ -0,0 +1,6 @@ +{ + "Culture": "zh-TW", + "Strings": { + "SourceName": "P2P地震資訊" + } +} \ No newline at end of file diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.P2PQuake/zh-Hant.json.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.P2PQuake/zh-Hant.json.meta new file mode 100644 index 0000000..0606e0a --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.P2PQuake/zh-Hant.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 704940476687b1b43a713305dd275d3c +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.P2PQuake/zh.json b/Assets/StreamingAssets/Messages/Cryville.EEW.P2PQuake/zh.json new file mode 100644 index 0000000..24b29b1 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.P2PQuake/zh.json @@ -0,0 +1,6 @@ +{ + "Culture": "zh-CN", + "Strings": { + "SourceName": "P2P地震信æ¯" + } +} \ No newline at end of file diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.P2PQuake/zh.json.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.P2PQuake/zh.json.meta new file mode 100644 index 0000000..4e47fee --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.P2PQuake/zh.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 643c09fce5fa33048a0a599cab63f9e3 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.UpdateChecker.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.UpdateChecker.meta new file mode 100644 index 0000000..8d74082 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.UpdateChecker.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 275a48276a4124f4bb2a765e1e73a93b +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.UpdateChecker/ja.json b/Assets/StreamingAssets/Messages/Cryville.EEW.UpdateChecker/ja.json new file mode 100644 index 0000000..b988a2e --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.UpdateChecker/ja.json @@ -0,0 +1,8 @@ +{ + "Culture": "ja-JP", + "Strings": { + "SourceName": "アップデートãƒã‚§ãƒƒã‚«ãƒ¼", + "UnknownVersion": "éžå…¬å¼ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’使ã£ã¦ã„ã¾ã™ã€‚", + "UpdateAvailable": "æ–°ãƒãƒ¼ã‚¸ãƒ§ãƒ³ãŒã‚りã¾ã™ã€‚設定ã®ã€ŒCysTerra ã«ã¤ã„ã¦ã€ã§å¤‰æ›´å†…容を確èªã—ã€æ–°ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’ダウンロードã—ã¦ãã ã•ã„。" + } +} \ No newline at end of file diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.UpdateChecker/ja.json.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.UpdateChecker/ja.json.meta new file mode 100644 index 0000000..4f21967 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.UpdateChecker/ja.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 4fc9ea55b6696ea43ba3fddeb42c7649 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.UpdateChecker/und.json b/Assets/StreamingAssets/Messages/Cryville.EEW.UpdateChecker/und.json new file mode 100644 index 0000000..8cc71e9 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.UpdateChecker/und.json @@ -0,0 +1,8 @@ +{ + "Culture": "en-US", + "Strings": { + "SourceName": "update checker", + "UnknownVersion": "You are using an unofficial version.", + "UpdateAvailable": "An update is available. Please go to the settings and tap \"About\" to check out the changelog and download the new version." + } +} \ No newline at end of file diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.UpdateChecker/und.json.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.UpdateChecker/und.json.meta new file mode 100644 index 0000000..d7a6762 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.UpdateChecker/und.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 9a0d4f710eef0b448bdeda9dfe72b2b7 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.UpdateChecker/yue.json b/Assets/StreamingAssets/Messages/Cryville.EEW.UpdateChecker/yue.json new file mode 100644 index 0000000..0bb9bdf --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.UpdateChecker/yue.json @@ -0,0 +1,8 @@ +{ + "Culture": "yue-HK", + "Strings": { + "SourceName": "更新檢查", + "UnknownVersion": "你正在使用嘅係éžå®˜æ–¹ç‰ˆæœ¬ã€‚", + "UpdateAvailable": "æ¾åˆ°å’—新版本。請轉到設置入é¢å˜…“關於â€åšŸç‡æ›´æ–°å’—乜嘢åŒåŸ‹ä¸‹è¼‰æ–°ç‰ˆæœ¬ã€‚" + } +} \ No newline at end of file diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.UpdateChecker/yue.json.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.UpdateChecker/yue.json.meta new file mode 100644 index 0000000..8ac6202 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.UpdateChecker/yue.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 3445e0749bcd64b478f3be768e0f796c +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.UpdateChecker/zh-Hant.json b/Assets/StreamingAssets/Messages/Cryville.EEW.UpdateChecker/zh-Hant.json new file mode 100644 index 0000000..500d713 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.UpdateChecker/zh-Hant.json @@ -0,0 +1,8 @@ +{ + "Culture": "zh-TW", + "Strings": { + "SourceName": "更新檢查", + "UnknownVersion": "您正在使用éžå®˜æ–¹ç‰ˆæœ¬ã€‚", + "UpdateAvailable": "ç™¼ç¾æ–°ç‰ˆæœ¬ã€‚è«‹é»žæŒ‰è¨­å®šä¸­çš„â€œé—œæ–¼â€æŸ¥çœ‹æ›´æ–°å†…容åŠä¸‹è¼‰æ–°ç‰ˆæœ¬ã€‚" + } +} \ No newline at end of file diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.UpdateChecker/zh-Hant.json.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.UpdateChecker/zh-Hant.json.meta new file mode 100644 index 0000000..40fd036 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.UpdateChecker/zh-Hant.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 364afaf83cd344c41aad490afb46253f +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.UpdateChecker/zh.json b/Assets/StreamingAssets/Messages/Cryville.EEW.UpdateChecker/zh.json new file mode 100644 index 0000000..e4aec7b --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.UpdateChecker/zh.json @@ -0,0 +1,8 @@ +{ + "Culture": "zh-CN", + "Strings": { + "SourceName": "更新检查", + "UnknownVersion": "您正在使用éžå®˜æ–¹ç‰ˆæœ¬ã€‚", + "UpdateAvailable": "æ£€æµ‹åˆ°æ–°ç‰ˆæœ¬ã€‚è¯·è½¬åˆ°è®¾ç½®é‡Œçš„â€œå…³äºŽâ€æŸ¥çœ‹æ›´æ–°å†…容并下载新版本。" + } +} \ No newline at end of file diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.UpdateChecker/zh.json.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.UpdateChecker/zh.json.meta new file mode 100644 index 0000000..f51796e --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.UpdateChecker/zh.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 8bfb6386552aec740b1e8742e723311d +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS.meta new file mode 100644 index 0000000..f0407ad --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: dc5284fecfb201a498a77ba9409cecb1 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/CENCEEW.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/CENCEEW.meta new file mode 100644 index 0000000..667cfd7 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/CENCEEW.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1b8efe03febdeab4e99542b364423133 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/CENCEEW/en.json b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/CENCEEW/en.json new file mode 100644 index 0000000..7c6c7a5 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/CENCEEW/en.json @@ -0,0 +1,6 @@ +{ + "Culture": "en-US", + "Strings": { + "Body": "Earthquake warning. Revision {0}. Earthquake in {1}. Magnitude {2:F1}. Max intensity {3}." + } +} \ No newline at end of file diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/CENCEEW/en.json.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/CENCEEW/en.json.meta new file mode 100644 index 0000000..62214f2 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/CENCEEW/en.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: b37acdccac14be5498f7e55bb8efbc49 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/CENCEEW/und.json b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/CENCEEW/und.json new file mode 100644 index 0000000..3ebf266 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/CENCEEW/und.json @@ -0,0 +1,6 @@ +{ + "Culture": "zh-CN", + "Strings": { + "Body": "地震预警。第{0}报。{1}å‘生规模{2:F1}级地震。最大烈度{3}。" + } +} \ No newline at end of file diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/CENCEEW/und.json.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/CENCEEW/und.json.meta new file mode 100644 index 0000000..8f5789f --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/CENCEEW/und.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 9cdae7ec3f8702447be6e2e9c650bdc8 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/CENCEEW/yue.json b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/CENCEEW/yue.json new file mode 100644 index 0000000..eaf61e7 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/CENCEEW/yue.json @@ -0,0 +1,6 @@ +{ + "Culture": "yue-HK", + "Strings": { + "Body": "地震é è­¦ã€‚第{0}報。{1}ç™¼ç”Ÿè¦æ¨¡{2:F1}級地震。最大烈度{3}。" + } +} \ No newline at end of file diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/CENCEEW/yue.json.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/CENCEEW/yue.json.meta new file mode 100644 index 0000000..2fe34ea --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/CENCEEW/yue.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 2c8b8f5a45cb687449f90eac03ad13cf +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/CENCEEW/zh-Hant.json b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/CENCEEW/zh-Hant.json new file mode 100644 index 0000000..04520ed --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/CENCEEW/zh-Hant.json @@ -0,0 +1,6 @@ +{ + "Culture": "zh-TW", + "Strings": { + "Body": "地震é è­¦ã€‚第{0}報。{1}ç™¼ç”Ÿè¦æ¨¡{2:F1}級地震。最大烈度{3}。" + } +} \ No newline at end of file diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/CENCEEW/zh-Hant.json.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/CENCEEW/zh-Hant.json.meta new file mode 100644 index 0000000..58fc7aa --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/CENCEEW/zh-Hant.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: b900513dd1176694b96101d06b841543 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/CENCEarthquake.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/CENCEarthquake.meta new file mode 100644 index 0000000..e92e625 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/CENCEarthquake.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: cac34d84db5c1e84fb7c3a16c1676ce0 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/CENCEarthquake/en.json b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/CENCEarthquake/en.json new file mode 100644 index 0000000..2ea311c --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/CENCEarthquake/en.json @@ -0,0 +1,9 @@ +{ + "Culture": "en-US", + "Strings": { + "Body": "Earthquake information. {4}. At {0}, a magnitude {2} earthquake occurred in {1}. Hypocenter depth {3} kilometers.", + "Title": "Earthquake information", + "TypeAutomatic": "Automatic", + "TypeReviewed": "Reviewed" + } +} \ No newline at end of file diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/CENCEarthquake/en.json.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/CENCEarthquake/en.json.meta new file mode 100644 index 0000000..3b6aadc --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/CENCEarthquake/en.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 944ee97eaccfef04da71b3c4c783bd10 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/CENCEarthquake/und.json b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/CENCEarthquake/und.json new file mode 100644 index 0000000..bebc54b --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/CENCEarthquake/und.json @@ -0,0 +1,9 @@ +{ + "Culture": "zh-CN", + "Strings": { + "Body": "地震信æ¯ã€‚{4}。{0},{1}å‘生规模{2}çº§åœ°éœ‡ã€‚éœ‡æºæ·±åº¦{3}åƒç±³ã€‚", + "Title": "地震信æ¯", + "TypeAutomatic": "自动测定", + "TypeReviewed": "æ­£å¼æµ‹å®š" + } +} \ No newline at end of file diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/CENCEarthquake/und.json.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/CENCEarthquake/und.json.meta new file mode 100644 index 0000000..bb26757 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/CENCEarthquake/und.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: e98a5a1ee1ac0bc4e8d7ffce91bfe7ee +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/CENCEarthquake/yue.json b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/CENCEarthquake/yue.json new file mode 100644 index 0000000..19da3d7 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/CENCEarthquake/yue.json @@ -0,0 +1,9 @@ +{ + "Culture": "yue-HK", + "Strings": { + "Body": "地震資訊。{4}。{0},{1}ç™¼ç”Ÿè¦æ¨¡{2}ç´šåœ°éœ‡ã€‚éœ‡æºæ·±åº¦{3}公里。", + "Title": "地震資訊", + "TypeAutomatic": "自動測定", + "TypeReviewed": "æ­£å¼æ¸¬å®š" + } +} \ No newline at end of file diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/CENCEarthquake/yue.json.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/CENCEarthquake/yue.json.meta new file mode 100644 index 0000000..9543522 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/CENCEarthquake/yue.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: aa9100de5ddec6943949ea6a231eca89 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/CENCEarthquake/zh-Hant.json b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/CENCEarthquake/zh-Hant.json new file mode 100644 index 0000000..7313a36 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/CENCEarthquake/zh-Hant.json @@ -0,0 +1,9 @@ +{ + "Culture": "zh-TW", + "Strings": { + "Body": "地震資訊。{4}。{0},{1}ç™¼ç”Ÿè¦æ¨¡{2}ç´šåœ°éœ‡ã€‚éœ‡æºæ·±åº¦{3}公里。", + "Title": "地震資訊", + "TypeAutomatic": "自動測定", + "TypeReviewed": "æ­£å¼æ¸¬å®š" + } +} \ No newline at end of file diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/CENCEarthquake/zh-Hant.json.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/CENCEarthquake/zh-Hant.json.meta new file mode 100644 index 0000000..f57ac6d --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/CENCEarthquake/zh-Hant.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 25069a949a38e8d48ae8bb2f0b4ef37c +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/CWAEEW.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/CWAEEW.meta new file mode 100644 index 0000000..3f440ae --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/CWAEEW.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6bded05614121c64f92cf1388f29f7dc +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/CWAEEW/en.json b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/CWAEEW/en.json new file mode 100644 index 0000000..dc63584 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/CWAEEW/en.json @@ -0,0 +1,7 @@ +{ + "Culture": "en-US", + "Strings": { + "Body": "Earthquake warning. Revision {0}. Earthquake in {1}. Max intensity {2}.", + "Cancel": "The earthquake warning issued just now has been canceled." + } +} \ No newline at end of file diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/CWAEEW/en.json.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/CWAEEW/en.json.meta new file mode 100644 index 0000000..b02140e --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/CWAEEW/en.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: d3d35984a1b223f4ea35f3346796d5cf +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/CWAEEW/und.json b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/CWAEEW/und.json new file mode 100644 index 0000000..eca120c --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/CWAEEW/und.json @@ -0,0 +1,7 @@ +{ + "Culture": "zh-TW", + "Strings": { + "Body": "地震é è­¦ã€‚第{0}報。{1}發生地震。最大震度{2}。", + "Cancel": "剛æ‰ç™¼ä½ˆçš„地震é è­¦å·²è¢«å–消。" + } +} \ No newline at end of file diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/CWAEEW/und.json.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/CWAEEW/und.json.meta new file mode 100644 index 0000000..3741e23 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/CWAEEW/und.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 428505f1cd4aba1449b6c1ae41cb13c2 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/CWAEEW/yue.json b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/CWAEEW/yue.json new file mode 100644 index 0000000..175fb52 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/CWAEEW/yue.json @@ -0,0 +1,7 @@ +{ + "Culture": "yue-HK", + "Strings": { + "Body": "地震é è­¦ã€‚第{0}報。{1}發生地震。最大震度{2}。", + "Cancel": "頭先發佈嘅地震é è­¦å·²è¢«å–消。" + } +} \ No newline at end of file diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/CWAEEW/yue.json.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/CWAEEW/yue.json.meta new file mode 100644 index 0000000..b7601af --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/CWAEEW/yue.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 976480888354cb142b30e6303fb0653c +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/CWAEEW/zh-Hans.json b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/CWAEEW/zh-Hans.json new file mode 100644 index 0000000..0a3c48a --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/CWAEEW/zh-Hans.json @@ -0,0 +1,7 @@ +{ + "Culture": "zh-CN", + "Strings": { + "Body": "地震预警。第{0}报。{1}å‘生地震。最大震度{2}。", + "Cancel": "刚æ‰å‘å¸ƒçš„åœ°éœ‡é¢„è­¦å·²è¢«å–æ¶ˆã€‚" + } +} \ No newline at end of file diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/CWAEEW/zh-Hans.json.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/CWAEEW/zh-Hans.json.meta new file mode 100644 index 0000000..1080e2c --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/CWAEEW/zh-Hans.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 22b3054b26046fd418c63a2a3c0f1206 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/FujianEEW.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/FujianEEW.meta new file mode 100644 index 0000000..7e9654d --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/FujianEEW.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 788349607b9ba4247ac187ea562cea8e +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/FujianEEW/en.json b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/FujianEEW/en.json new file mode 100644 index 0000000..427c744 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/FujianEEW/en.json @@ -0,0 +1,8 @@ +{ + "Culture": "en-US", + "Strings": { + "Body": "Earthquake warning. {0}. Earthquake in {1}. Magnitude {2:F1}.", + "Serial": "Revision {0}", + "SerialFinal": "Final revision" + } +} \ No newline at end of file diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/FujianEEW/en.json.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/FujianEEW/en.json.meta new file mode 100644 index 0000000..c03ed2f --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/FujianEEW/en.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 54b59f5131d2e24419a4823fc1252f03 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/FujianEEW/und.json b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/FujianEEW/und.json new file mode 100644 index 0000000..4e0bcac --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/FujianEEW/und.json @@ -0,0 +1,8 @@ +{ + "Culture": "zh-CN", + "Strings": { + "Body": "地震预警。{0}。{1}å‘生规模{2:F1}级地震。", + "Serial": "第{0}报", + "SerialFinal": "最终报" + } +} \ No newline at end of file diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/FujianEEW/und.json.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/FujianEEW/und.json.meta new file mode 100644 index 0000000..e66f49e --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/FujianEEW/und.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 095a9b0f874082a45931e8c622d47452 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/FujianEEW/yue.json b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/FujianEEW/yue.json new file mode 100644 index 0000000..a8c69bc --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/FujianEEW/yue.json @@ -0,0 +1,8 @@ +{ + "Culture": "yue-HK", + "Strings": { + "Body": "地震é è­¦ã€‚{0}。{1}ç™¼ç”Ÿè¦æ¨¡{2:F1}級地震。", + "Serial": "第{0}å ±", + "SerialFinal": "最終報" + } +} \ No newline at end of file diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/FujianEEW/yue.json.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/FujianEEW/yue.json.meta new file mode 100644 index 0000000..cba1d16 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/FujianEEW/yue.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: f5f30cd0fbc86594d8da80b91f0d7957 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/FujianEEW/zh-Hant.json b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/FujianEEW/zh-Hant.json new file mode 100644 index 0000000..50a8cca --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/FujianEEW/zh-Hant.json @@ -0,0 +1,8 @@ +{ + "Culture": "zh-TW", + "Strings": { + "Body": "地震é è­¦ã€‚{0}。{1}ç™¼ç”Ÿè¦æ¨¡{2:F1}級地震。", + "Serial": "第{0}å ±", + "SerialFinal": "最終報" + } +} \ No newline at end of file diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/FujianEEW/zh-Hant.json.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/FujianEEW/zh-Hant.json.meta new file mode 100644 index 0000000..cc47317 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/FujianEEW/zh-Hant.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 5918c8f5cde204e4cae6619c171f2c6a +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/JMAEEW.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/JMAEEW.meta new file mode 100644 index 0000000..edb22dc --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/JMAEEW.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4eab95c8be2d92b4d9809c473362edf1 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/JMAEEW/en.json b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/JMAEEW/en.json new file mode 100644 index 0000000..506aa68 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/JMAEEW/en.json @@ -0,0 +1,14 @@ +{ + "Culture": "en-US", + "Strings": { + "Area": "Watch out for strong shaking in {0}.", + "AreaDelimiter": "; ", + "Body": "{0}. Earthquake in {1}. Max intensity {2} estimated.", + "BodyLowQuality": "{0}. Earthquake detected in {1}. Max intensity {2} estimated.", + "Cancel": "JMA has cancelled the earthquake early warning.", + "Drilling": "This is for drilling. ", + "Serial": "Revision {0}", + "SerialFinal": "Final revision", + "Title": "Earthquake early warning. " + } +} \ No newline at end of file diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/JMAEEW/en.json.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/JMAEEW/en.json.meta new file mode 100644 index 0000000..1a42d6c --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/JMAEEW/en.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 0717c3ef2aa4f7e4998b76f6e03a8789 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/JMAEEW/und.json b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/JMAEEW/und.json new file mode 100644 index 0000000..f8c8fe5 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/JMAEEW/und.json @@ -0,0 +1,14 @@ +{ + "Culture": "ja-JP", + "Strings": { + "Area": "{0}ã§ã¯ã€å¼·ã„æºã‚Œã«è­¦æˆ’ã—ã¦ãã ã•ã„。", + "AreaDelimiter": "ã€", + "Body": "{0}。{1}ã§åœ°éœ‡ã€‚推定最大震度{2}。", + "BodyLowQuality": "{0}。{1}ã§åœ°éœ‡ã‚’検知。推定最大震度{2}。", + "Cancel": "å…ˆã»ã©ã®ç·Šæ€¥åœ°éœ‡é€Ÿå ±ã¯å–り消ã•れã¾ã—ãŸã€‚", + "Drilling": "ã“れã¯è¨“ç·´ã§ã™ã€‚", + "Serial": "第{0}å ±", + "SerialFinal": "最終報", + "Title": "緊急地震速報。" + } +} \ No newline at end of file diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/JMAEEW/und.json.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/JMAEEW/und.json.meta new file mode 100644 index 0000000..fe16b94 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/JMAEEW/und.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 1fc35457c40636740bc1ca2d1b214364 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/JMAEEW/yue.json b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/JMAEEW/yue.json new file mode 100644 index 0000000..6c20ed9 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/JMAEEW/yue.json @@ -0,0 +1,14 @@ +{ + "Culture": "yue-HK", + "Strings": { + "Area": "{0},請注æ„強烈震動。", + "AreaDelimiter": "ï¼›", + "Body": "{0}。{1}發生地震。推定最大震度{2}。", + "BodyLowQuality": "{0}。{1}檢測到地震。推定最大震度{2}。", + "Cancel": "é ­å…ˆç™¼ä½ˆå˜…ç·Šæ€¥åœ°éœ‡é€Ÿå ±å·²è¢«å–æ¶ˆã€‚", + "Drilling": "呢報係訓練報。", + "Serial": "第{0}å ±", + "SerialFinal": "最終報", + "Title": "緊急地震速報。" + } +} \ No newline at end of file diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/JMAEEW/yue.json.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/JMAEEW/yue.json.meta new file mode 100644 index 0000000..9a99765 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/JMAEEW/yue.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 7ecd99a333d395744b0b33e0c2be1b38 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/JMAEEW/zh-Hant.json b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/JMAEEW/zh-Hant.json new file mode 100644 index 0000000..6603667 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/JMAEEW/zh-Hant.json @@ -0,0 +1,14 @@ +{ + "Culture": "zh-TW", + "Strings": { + "Area": "{0},請警戒強烈的震動。", + "AreaDelimiter": "ï¼›", + "Body": "{0}。{1}發生地震。推定最大震度{2}。", + "BodyLowQuality": "{0}。{1}檢測到地震。推定最大震度{2}。", + "Cancel": "剛æ‰ç™¼å¸ƒçš„ç·Šæ€¥åœ°éœ‡é€Ÿå ±å·²è¢«å–æ¶ˆã€‚", + "Drilling": "本報為訓練報。", + "Serial": "第{0}å ±", + "SerialFinal": "最終報", + "Title": "緊急地震速報。" + } +} \ No newline at end of file diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/JMAEEW/zh-Hant.json.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/JMAEEW/zh-Hant.json.meta new file mode 100644 index 0000000..1c66f48 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/JMAEEW/zh-Hant.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 2768dede1c343394cadd84152e861a12 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/JMAEEW/zh.json b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/JMAEEW/zh.json new file mode 100644 index 0000000..e595e04 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/JMAEEW/zh.json @@ -0,0 +1,14 @@ +{ + "Culture": "zh-CN", + "Strings": { + "Area": "{0},请注æ„强烈震动。", + "AreaDelimiter": "ï¼›", + "Body": "{0}。{1}å‘生地震。推定最大震度{2}。", + "BodyLowQuality": "{0}。{1}检测到地震。推定最大震度{2}。", + "Cancel": "刚æ‰å‘å¸ƒçš„ç´§æ€¥åœ°éœ‡é€ŸæŠ¥å·²è¢«å–æ¶ˆã€‚", + "Drilling": "本报为训练报。", + "Serial": "第{0}报", + "SerialFinal": "最终报", + "Title": "紧急地震速报。" + } +} \ No newline at end of file diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/JMAEEW/zh.json.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/JMAEEW/zh.json.meta new file mode 100644 index 0000000..2c82a0b --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/JMAEEW/zh.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: c0868506bcf9acc41b040f036f7f0a37 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/SichuanEEW.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/SichuanEEW.meta new file mode 100644 index 0000000..8b3eed9 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/SichuanEEW.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 83188d5a16e4e294dbfadd82d17cee88 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/SichuanEEW/en.json b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/SichuanEEW/en.json new file mode 100644 index 0000000..7c6c7a5 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/SichuanEEW/en.json @@ -0,0 +1,6 @@ +{ + "Culture": "en-US", + "Strings": { + "Body": "Earthquake warning. Revision {0}. Earthquake in {1}. Magnitude {2:F1}. Max intensity {3}." + } +} \ No newline at end of file diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/SichuanEEW/en.json.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/SichuanEEW/en.json.meta new file mode 100644 index 0000000..a882d7c --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/SichuanEEW/en.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: d0c2e897c10baba4980e68938ed052db +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/SichuanEEW/und.json b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/SichuanEEW/und.json new file mode 100644 index 0000000..3ebf266 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/SichuanEEW/und.json @@ -0,0 +1,6 @@ +{ + "Culture": "zh-CN", + "Strings": { + "Body": "地震预警。第{0}报。{1}å‘生规模{2:F1}级地震。最大烈度{3}。" + } +} \ No newline at end of file diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/SichuanEEW/und.json.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/SichuanEEW/und.json.meta new file mode 100644 index 0000000..b84ac03 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/SichuanEEW/und.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 2122fea2b9f6888419b9a970107ab45a +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/SichuanEEW/yue.json b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/SichuanEEW/yue.json new file mode 100644 index 0000000..eaf61e7 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/SichuanEEW/yue.json @@ -0,0 +1,6 @@ +{ + "Culture": "yue-HK", + "Strings": { + "Body": "地震é è­¦ã€‚第{0}報。{1}ç™¼ç”Ÿè¦æ¨¡{2:F1}級地震。最大烈度{3}。" + } +} \ No newline at end of file diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/SichuanEEW/yue.json.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/SichuanEEW/yue.json.meta new file mode 100644 index 0000000..5fceb88 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/SichuanEEW/yue.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 0e7fa960a140f124f88b93a7215c0753 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/SichuanEEW/zh-Hant.json b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/SichuanEEW/zh-Hant.json new file mode 100644 index 0000000..04520ed --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/SichuanEEW/zh-Hant.json @@ -0,0 +1,6 @@ +{ + "Culture": "zh-TW", + "Strings": { + "Body": "地震é è­¦ã€‚第{0}報。{1}ç™¼ç”Ÿè¦æ¨¡{2:F1}級地震。最大烈度{3}。" + } +} \ No newline at end of file diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/SichuanEEW/zh-Hant.json.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/SichuanEEW/zh-Hant.json.meta new file mode 100644 index 0000000..cdf8206 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.TTS/SichuanEEW/zh-Hant.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 7966a8a47045abd4a808bdb0039a5695 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.meta new file mode 100644 index 0000000..e63d2e5 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2430be7e45fd03943b4684ca8ef017f7 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx/en.json b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx/en.json new file mode 100644 index 0000000..ea76327 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx/en.json @@ -0,0 +1,6 @@ +{ + "Culture": "en-US", + "Strings": { + "SourceName": "Wolfx" + } +} \ No newline at end of file diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx/en.json.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx/en.json.meta new file mode 100644 index 0000000..8698bad --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx/en.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: eef95db813dc00641b98bdf1be1004b4 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx/und.json b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx/und.json new file mode 100644 index 0000000..66bc9d4 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx/und.json @@ -0,0 +1,6 @@ +{ + "Culture": "zh-CN", + "Strings": { + "SourceName": "Wolfx" + } +} \ No newline at end of file diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx/und.json.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx/und.json.meta new file mode 100644 index 0000000..0a74144 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx/und.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: d3a76824b3613b74b88bc3d2424f276b +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx/yue.json b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx/yue.json new file mode 100644 index 0000000..f21750e --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx/yue.json @@ -0,0 +1,6 @@ +{ + "Culture": "yue-HK", + "Strings": { + "SourceName": "Wolfx" + } +} \ No newline at end of file diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx/yue.json.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx/yue.json.meta new file mode 100644 index 0000000..41da349 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx/yue.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 0347179da94f2c94cae0bd85848e1585 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx/zh-Hant.json b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx/zh-Hant.json new file mode 100644 index 0000000..857af42 --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx/zh-Hant.json @@ -0,0 +1,6 @@ +{ + "Culture": "zh-TW", + "Strings": { + "SourceName": "Wolfx" + } +} \ No newline at end of file diff --git a/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx/zh-Hant.json.meta b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx/zh-Hant.json.meta new file mode 100644 index 0000000..e539b7b --- /dev/null +++ b/Assets/StreamingAssets/Messages/Cryville.EEW.Wolfx/zh-Hant.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: daadcd8242d0ad7499165a75fce312b7 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Sounds.meta b/Assets/StreamingAssets/Sounds.meta new file mode 100644 index 0000000..1421e25 --- /dev/null +++ b/Assets/StreamingAssets/Sounds.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a9f312145ce3c74409ecd1a30c92ae0c +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Sounds/eew_1.ogg b/Assets/StreamingAssets/Sounds/eew_1.ogg new file mode 100644 index 0000000..ffeae44 Binary files /dev/null and b/Assets/StreamingAssets/Sounds/eew_1.ogg differ diff --git a/Assets/StreamingAssets/Sounds/eew_1.ogg.meta b/Assets/StreamingAssets/Sounds/eew_1.ogg.meta new file mode 100644 index 0000000..5adf6ac --- /dev/null +++ b/Assets/StreamingAssets/Sounds/eew_1.ogg.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 62fd631d8521b5e43a5f074df5469cda +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Sounds/eew_2.ogg b/Assets/StreamingAssets/Sounds/eew_2.ogg new file mode 100644 index 0000000..8d428e4 Binary files /dev/null and b/Assets/StreamingAssets/Sounds/eew_2.ogg differ diff --git a/Assets/StreamingAssets/Sounds/eew_2.ogg.meta b/Assets/StreamingAssets/Sounds/eew_2.ogg.meta new file mode 100644 index 0000000..3ecfbd5 --- /dev/null +++ b/Assets/StreamingAssets/Sounds/eew_2.ogg.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 565cddd057f7420429914cd2c19c74ba +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Sounds/eew_3.ogg b/Assets/StreamingAssets/Sounds/eew_3.ogg new file mode 100644 index 0000000..c14d593 Binary files /dev/null and b/Assets/StreamingAssets/Sounds/eew_3.ogg differ diff --git a/Assets/StreamingAssets/Sounds/eew_3.ogg.meta b/Assets/StreamingAssets/Sounds/eew_3.ogg.meta new file mode 100644 index 0000000..2c82e1c --- /dev/null +++ b/Assets/StreamingAssets/Sounds/eew_3.ogg.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: b8fb6e7e5783b25449c501108ed59c0e +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Sounds/eew_4.ogg b/Assets/StreamingAssets/Sounds/eew_4.ogg new file mode 100644 index 0000000..9abe14a Binary files /dev/null and b/Assets/StreamingAssets/Sounds/eew_4.ogg differ diff --git a/Assets/StreamingAssets/Sounds/eew_4.ogg.meta b/Assets/StreamingAssets/Sounds/eew_4.ogg.meta new file mode 100644 index 0000000..ca2db8d --- /dev/null +++ b/Assets/StreamingAssets/Sounds/eew_4.ogg.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 78573a99d5243c2448693d128c142705 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Sounds/eew_5.ogg b/Assets/StreamingAssets/Sounds/eew_5.ogg new file mode 100644 index 0000000..6de42ee Binary files /dev/null and b/Assets/StreamingAssets/Sounds/eew_5.ogg differ diff --git a/Assets/StreamingAssets/Sounds/eew_5.ogg.meta b/Assets/StreamingAssets/Sounds/eew_5.ogg.meta new file mode 100644 index 0000000..67b8b9e --- /dev/null +++ b/Assets/StreamingAssets/Sounds/eew_5.ogg.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 268e5699ff2dc5546b59308d0cc19c05 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Sounds/eew_local_2.ogg b/Assets/StreamingAssets/Sounds/eew_local_2.ogg new file mode 100644 index 0000000..3302b2e Binary files /dev/null and b/Assets/StreamingAssets/Sounds/eew_local_2.ogg differ diff --git a/Assets/StreamingAssets/Sounds/eew_local_2.ogg.meta b/Assets/StreamingAssets/Sounds/eew_local_2.ogg.meta new file mode 100644 index 0000000..aa1e69a --- /dev/null +++ b/Assets/StreamingAssets/Sounds/eew_local_2.ogg.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 61c131aee08c04147af203e766ae9eb9 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Sounds/eew_local_4.ogg b/Assets/StreamingAssets/Sounds/eew_local_4.ogg new file mode 100644 index 0000000..c71dbdc Binary files /dev/null and b/Assets/StreamingAssets/Sounds/eew_local_4.ogg differ diff --git a/Assets/StreamingAssets/Sounds/eew_local_4.ogg.meta b/Assets/StreamingAssets/Sounds/eew_local_4.ogg.meta new file mode 100644 index 0000000..9c6d44e --- /dev/null +++ b/Assets/StreamingAssets/Sounds/eew_local_4.ogg.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: d4a09f4cad9245749b59ba914af3718b +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Sounds/eew_update.ogg b/Assets/StreamingAssets/Sounds/eew_update.ogg new file mode 100644 index 0000000..1bbb8f8 Binary files /dev/null and b/Assets/StreamingAssets/Sounds/eew_update.ogg differ diff --git a/Assets/StreamingAssets/Sounds/eew_update.ogg.meta b/Assets/StreamingAssets/Sounds/eew_update.ogg.meta new file mode 100644 index 0000000..eaac549 --- /dev/null +++ b/Assets/StreamingAssets/Sounds/eew_update.ogg.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 67a06cd3ade98924e89908844730b113 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Sounds/eew_update_cancel.ogg b/Assets/StreamingAssets/Sounds/eew_update_cancel.ogg new file mode 100644 index 0000000..f2923e1 Binary files /dev/null and b/Assets/StreamingAssets/Sounds/eew_update_cancel.ogg differ diff --git a/Assets/StreamingAssets/Sounds/eew_update_cancel.ogg.meta b/Assets/StreamingAssets/Sounds/eew_update_cancel.ogg.meta new file mode 100644 index 0000000..c3d76b1 --- /dev/null +++ b/Assets/StreamingAssets/Sounds/eew_update_cancel.ogg.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 064e6141265179a41a3e6bb893484709 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Sounds/eew_update_final.ogg b/Assets/StreamingAssets/Sounds/eew_update_final.ogg new file mode 100644 index 0000000..92e7b59 Binary files /dev/null and b/Assets/StreamingAssets/Sounds/eew_update_final.ogg differ diff --git a/Assets/StreamingAssets/Sounds/eew_update_final.ogg.meta b/Assets/StreamingAssets/Sounds/eew_update_final.ogg.meta new file mode 100644 index 0000000..e023207 --- /dev/null +++ b/Assets/StreamingAssets/Sounds/eew_update_final.ogg.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 9058b70ee2ee6ee4488a5272eed24d1a +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Sounds/eq.ogg b/Assets/StreamingAssets/Sounds/eq.ogg new file mode 100644 index 0000000..2a7f201 Binary files /dev/null and b/Assets/StreamingAssets/Sounds/eq.ogg differ diff --git a/Assets/StreamingAssets/Sounds/eq.ogg.meta b/Assets/StreamingAssets/Sounds/eq.ogg.meta new file mode 100644 index 0000000..844b0a2 --- /dev/null +++ b/Assets/StreamingAssets/Sounds/eq.ogg.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 072c123f56c61a6458da419b1e47bbd1 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Sounds/eq_a.ogg b/Assets/StreamingAssets/Sounds/eq_a.ogg new file mode 100644 index 0000000..7b50ec7 Binary files /dev/null and b/Assets/StreamingAssets/Sounds/eq_a.ogg differ diff --git a/Assets/StreamingAssets/Sounds/eq_a.ogg.meta b/Assets/StreamingAssets/Sounds/eq_a.ogg.meta new file mode 100644 index 0000000..c973b3d --- /dev/null +++ b/Assets/StreamingAssets/Sounds/eq_a.ogg.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 12a886bd280f90442b252e15c775eeb2 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Sounds/eq_c.ogg b/Assets/StreamingAssets/Sounds/eq_c.ogg new file mode 100644 index 0000000..686db47 Binary files /dev/null and b/Assets/StreamingAssets/Sounds/eq_c.ogg differ diff --git a/Assets/StreamingAssets/Sounds/eq_c.ogg.meta b/Assets/StreamingAssets/Sounds/eq_c.ogg.meta new file mode 100644 index 0000000..7b17083 --- /dev/null +++ b/Assets/StreamingAssets/Sounds/eq_c.ogg.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: c23a5a944019e134797f9fc57ed6974a +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Sounds/eq_d.ogg b/Assets/StreamingAssets/Sounds/eq_d.ogg new file mode 100644 index 0000000..df13bfd Binary files /dev/null and b/Assets/StreamingAssets/Sounds/eq_d.ogg differ diff --git a/Assets/StreamingAssets/Sounds/eq_d.ogg.meta b/Assets/StreamingAssets/Sounds/eq_d.ogg.meta new file mode 100644 index 0000000..7ba144a --- /dev/null +++ b/Assets/StreamingAssets/Sounds/eq_d.ogg.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 89c0217fa27faeb4b8d512f0960fe383 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Sounds/eq_i.ogg b/Assets/StreamingAssets/Sounds/eq_i.ogg new file mode 100644 index 0000000..9fae605 Binary files /dev/null and b/Assets/StreamingAssets/Sounds/eq_i.ogg differ diff --git a/Assets/StreamingAssets/Sounds/eq_i.ogg.meta b/Assets/StreamingAssets/Sounds/eq_i.ogg.meta new file mode 100644 index 0000000..a24f555 --- /dev/null +++ b/Assets/StreamingAssets/Sounds/eq_i.ogg.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 4cd0236a715b9244a881caf4f9cfc9e0 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Sounds/ev.ogg b/Assets/StreamingAssets/Sounds/ev.ogg new file mode 100644 index 0000000..3f7baee Binary files /dev/null and b/Assets/StreamingAssets/Sounds/ev.ogg differ diff --git a/Assets/StreamingAssets/Sounds/ev.ogg.meta b/Assets/StreamingAssets/Sounds/ev.ogg.meta new file mode 100644 index 0000000..0575e4b --- /dev/null +++ b/Assets/StreamingAssets/Sounds/ev.ogg.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: d7760b8d0faa90247bd1986d28ce59e4 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Sounds/jp.meta b/Assets/StreamingAssets/Sounds/jp.meta new file mode 100644 index 0000000..e9e3ccb --- /dev/null +++ b/Assets/StreamingAssets/Sounds/jp.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 64e103dd933995a469c1770ee63ce439 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Sounds/jp/Emergency_Alert01-1-C.ogg b/Assets/StreamingAssets/Sounds/jp/Emergency_Alert01-1-C.ogg new file mode 100644 index 0000000..45b0a6a Binary files /dev/null and b/Assets/StreamingAssets/Sounds/jp/Emergency_Alert01-1-C.ogg differ diff --git a/Assets/StreamingAssets/Sounds/jp/Emergency_Alert01-1-C.ogg.meta b/Assets/StreamingAssets/Sounds/jp/Emergency_Alert01-1-C.ogg.meta new file mode 100644 index 0000000..bc9cfdd --- /dev/null +++ b/Assets/StreamingAssets/Sounds/jp/Emergency_Alert01-1-C.ogg.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 9b80343c3d9cf984dbc4b27d96afdfc2 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Sounds/jp/News-Alert02-2-C.ogg b/Assets/StreamingAssets/Sounds/jp/News-Alert02-2-C.ogg new file mode 100644 index 0000000..38da17a Binary files /dev/null and b/Assets/StreamingAssets/Sounds/jp/News-Alert02-2-C.ogg differ diff --git a/Assets/StreamingAssets/Sounds/jp/News-Alert02-2-C.ogg.meta b/Assets/StreamingAssets/Sounds/jp/News-Alert02-2-C.ogg.meta new file mode 100644 index 0000000..1f94970 --- /dev/null +++ b/Assets/StreamingAssets/Sounds/jp/News-Alert02-2-C.ogg.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 7744c64c12551e74195d8a5258674e75 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Sounds/jp/News-Alert04-1-C.ogg b/Assets/StreamingAssets/Sounds/jp/News-Alert04-1-C.ogg new file mode 100644 index 0000000..fe0d514 Binary files /dev/null and b/Assets/StreamingAssets/Sounds/jp/News-Alert04-1-C.ogg differ diff --git a/Assets/StreamingAssets/Sounds/jp/News-Alert04-1-C.ogg.meta b/Assets/StreamingAssets/Sounds/jp/News-Alert04-1-C.ogg.meta new file mode 100644 index 0000000..a22fda0 --- /dev/null +++ b/Assets/StreamingAssets/Sounds/jp/News-Alert04-1-C.ogg.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 424044cc47869434b96cd6dffb94691b +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Sounds/jp/VTSE5.ogg b/Assets/StreamingAssets/Sounds/jp/VTSE5.ogg new file mode 100644 index 0000000..b0f7b58 Binary files /dev/null and b/Assets/StreamingAssets/Sounds/jp/VTSE5.ogg differ diff --git a/Assets/StreamingAssets/Sounds/jp/VTSE5.ogg.meta b/Assets/StreamingAssets/Sounds/jp/VTSE5.ogg.meta new file mode 100644 index 0000000..c91dcdb --- /dev/null +++ b/Assets/StreamingAssets/Sounds/jp/VTSE5.ogg.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 66ca7ca29d918414f9f33a6f94414f17 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Sounds/jp/VXSE51.ogg b/Assets/StreamingAssets/Sounds/jp/VXSE51.ogg new file mode 100644 index 0000000..b7443b0 Binary files /dev/null and b/Assets/StreamingAssets/Sounds/jp/VXSE51.ogg differ diff --git a/Assets/StreamingAssets/Sounds/jp/VXSE51.ogg.meta b/Assets/StreamingAssets/Sounds/jp/VXSE51.ogg.meta new file mode 100644 index 0000000..7e295f2 --- /dev/null +++ b/Assets/StreamingAssets/Sounds/jp/VXSE51.ogg.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 1fbf37b1ff7e6dd4f9aa0d2b1c1161fa +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Sounds/jp/VXSE52.ogg b/Assets/StreamingAssets/Sounds/jp/VXSE52.ogg new file mode 100644 index 0000000..a7b1c6a Binary files /dev/null and b/Assets/StreamingAssets/Sounds/jp/VXSE52.ogg differ diff --git a/Assets/StreamingAssets/Sounds/jp/VXSE52.ogg.meta b/Assets/StreamingAssets/Sounds/jp/VXSE52.ogg.meta new file mode 100644 index 0000000..effa375 --- /dev/null +++ b/Assets/StreamingAssets/Sounds/jp/VXSE52.ogg.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 6fc9c297042c65f4fadc6c589f2c0172 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Sounds/jp/VXSE53.ogg b/Assets/StreamingAssets/Sounds/jp/VXSE53.ogg new file mode 100644 index 0000000..87a3171 Binary files /dev/null and b/Assets/StreamingAssets/Sounds/jp/VXSE53.ogg differ diff --git a/Assets/StreamingAssets/Sounds/jp/VXSE53.ogg.meta b/Assets/StreamingAssets/Sounds/jp/VXSE53.ogg.meta new file mode 100644 index 0000000..6cbea39 --- /dev/null +++ b/Assets/StreamingAssets/Sounds/jp/VXSE53.ogg.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 76b8c9c79eb7c2e41b70a024d4bc0d0d +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Sounds/jp/VXSE5C.ogg b/Assets/StreamingAssets/Sounds/jp/VXSE5C.ogg new file mode 100644 index 0000000..b622fcc Binary files /dev/null and b/Assets/StreamingAssets/Sounds/jp/VXSE5C.ogg differ diff --git a/Assets/StreamingAssets/Sounds/jp/VXSE5C.ogg.meta b/Assets/StreamingAssets/Sounds/jp/VXSE5C.ogg.meta new file mode 100644 index 0000000..d008361 --- /dev/null +++ b/Assets/StreamingAssets/Sounds/jp/VXSE5C.ogg.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: ae5118e94cd08bc48a4ec8e220f0fefe +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Sounds/jp/eew0.ogg b/Assets/StreamingAssets/Sounds/jp/eew0.ogg new file mode 100644 index 0000000..18558de Binary files /dev/null and b/Assets/StreamingAssets/Sounds/jp/eew0.ogg differ diff --git a/Assets/StreamingAssets/Sounds/jp/eew0.ogg.meta b/Assets/StreamingAssets/Sounds/jp/eew0.ogg.meta new file mode 100644 index 0000000..eeabf75 --- /dev/null +++ b/Assets/StreamingAssets/Sounds/jp/eew0.ogg.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: cf6c0b14513e53748b0042b4005188eb +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Sounds/jp/eew3.ogg b/Assets/StreamingAssets/Sounds/jp/eew3.ogg new file mode 100644 index 0000000..1ccb92c Binary files /dev/null and b/Assets/StreamingAssets/Sounds/jp/eew3.ogg differ diff --git a/Assets/StreamingAssets/Sounds/jp/eew3.ogg.meta b/Assets/StreamingAssets/Sounds/jp/eew3.ogg.meta new file mode 100644 index 0000000..666b4e8 --- /dev/null +++ b/Assets/StreamingAssets/Sounds/jp/eew3.ogg.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 11720432c0ff895489a32b9513e7e1ff +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Sounds/jp/eew5.ogg b/Assets/StreamingAssets/Sounds/jp/eew5.ogg new file mode 100644 index 0000000..078a923 Binary files /dev/null and b/Assets/StreamingAssets/Sounds/jp/eew5.ogg differ diff --git a/Assets/StreamingAssets/Sounds/jp/eew5.ogg.meta b/Assets/StreamingAssets/Sounds/jp/eew5.ogg.meta new file mode 100644 index 0000000..40ab82c --- /dev/null +++ b/Assets/StreamingAssets/Sounds/jp/eew5.ogg.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: ae6d90003bae282498eda7ea24f979f6 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Sounds/jp/eewC.ogg b/Assets/StreamingAssets/Sounds/jp/eewC.ogg new file mode 100644 index 0000000..84e3a89 Binary files /dev/null and b/Assets/StreamingAssets/Sounds/jp/eewC.ogg differ diff --git a/Assets/StreamingAssets/Sounds/jp/eewC.ogg.meta b/Assets/StreamingAssets/Sounds/jp/eewC.ogg.meta new file mode 100644 index 0000000..d7beba5 --- /dev/null +++ b/Assets/StreamingAssets/Sounds/jp/eewC.ogg.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 7c4b80590cef1d94c9ab6d2df91d4a3f +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Sounds/jp/koushin.ogg b/Assets/StreamingAssets/Sounds/jp/koushin.ogg new file mode 100644 index 0000000..64df83f Binary files /dev/null and b/Assets/StreamingAssets/Sounds/jp/koushin.ogg differ diff --git a/Assets/StreamingAssets/Sounds/jp/koushin.ogg.meta b/Assets/StreamingAssets/Sounds/jp/koushin.ogg.meta new file mode 100644 index 0000000..099b61f --- /dev/null +++ b/Assets/StreamingAssets/Sounds/jp/koushin.ogg.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 455a30fbd840080438d9f27b1c64f3c9 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Sounds/jp/koushinE.ogg b/Assets/StreamingAssets/Sounds/jp/koushinE.ogg new file mode 100644 index 0000000..d012e3b Binary files /dev/null and b/Assets/StreamingAssets/Sounds/jp/koushinE.ogg differ diff --git a/Assets/StreamingAssets/Sounds/jp/koushinE.ogg.meta b/Assets/StreamingAssets/Sounds/jp/koushinE.ogg.meta new file mode 100644 index 0000000..cd24ec9 --- /dev/null +++ b/Assets/StreamingAssets/Sounds/jp/koushinE.ogg.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 533d09621c91cbe4da891d57bfe02cbf +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TextMesh Pro.meta b/Assets/TextMesh Pro.meta new file mode 100644 index 0000000..8306aea --- /dev/null +++ b/Assets/TextMesh Pro.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1eb3a3a1f4cda344f849e6ba47430c17 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TextMesh Pro/Editor Resources.meta b/Assets/TextMesh Pro/Editor Resources.meta new file mode 100644 index 0000000..cc9fde1 --- /dev/null +++ b/Assets/TextMesh Pro/Editor Resources.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: fa01d66f44e9d4a42ae8ca989003a496 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TextMesh Pro/Editor Resources/GUID CONVERT.json b/Assets/TextMesh Pro/Editor Resources/GUID CONVERT.json new file mode 100644 index 0000000..5d50733 --- /dev/null +++ b/Assets/TextMesh Pro/Editor Resources/GUID CONVERT.json @@ -0,0 +1,3 @@ +*** DO NOT REMOVE THIS FILE *** + +// This is a special file to control automatic GUID remapping of TMP resources such as to the Unity internal type. diff --git a/Assets/TextMesh Pro/Editor Resources/GUID CONVERT.json.meta b/Assets/TextMesh Pro/Editor Resources/GUID CONVERT.json.meta new file mode 100644 index 0000000..b089452 --- /dev/null +++ b/Assets/TextMesh Pro/Editor Resources/GUID CONVERT.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 2ade62400bece1a4f9093a91ca22b276 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TextMesh Pro/Editor Resources/Gizmos.meta b/Assets/TextMesh Pro/Editor Resources/Gizmos.meta new file mode 100644 index 0000000..8c88d03 --- /dev/null +++ b/Assets/TextMesh Pro/Editor Resources/Gizmos.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7b1bccbdc81aec64ea124b15e02ab12a +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TextMesh Pro/Editor Resources/Gizmos/TMP - Dropdown Icon.psd b/Assets/TextMesh Pro/Editor Resources/Gizmos/TMP - Dropdown Icon.psd new file mode 100644 index 0000000..93f5a2c Binary files /dev/null and b/Assets/TextMesh Pro/Editor Resources/Gizmos/TMP - Dropdown Icon.psd differ diff --git a/Assets/TextMesh Pro/Editor Resources/Gizmos/TMP - Dropdown Icon.psd.meta b/Assets/TextMesh Pro/Editor Resources/Gizmos/TMP - Dropdown Icon.psd.meta new file mode 100644 index 0000000..1e1f41a --- /dev/null +++ b/Assets/TextMesh Pro/Editor Resources/Gizmos/TMP - Dropdown Icon.psd.meta @@ -0,0 +1,143 @@ +fileFormatVersion: 2 +guid: be1dd4c785e3be14fb0a702bb1fe9772 +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/Assets/TextMesh Pro/Editor Resources/Gizmos/TMP - Font Asset Icon.psd b/Assets/TextMesh Pro/Editor Resources/Gizmos/TMP - Font Asset Icon.psd new file mode 100644 index 0000000..2fb1164 Binary files /dev/null and b/Assets/TextMesh Pro/Editor Resources/Gizmos/TMP - Font Asset Icon.psd differ diff --git a/Assets/TextMesh Pro/Editor Resources/Gizmos/TMP - Font Asset Icon.psd.meta b/Assets/TextMesh Pro/Editor Resources/Gizmos/TMP - Font Asset Icon.psd.meta new file mode 100644 index 0000000..612f1c7 --- /dev/null +++ b/Assets/TextMesh Pro/Editor Resources/Gizmos/TMP - Font Asset Icon.psd.meta @@ -0,0 +1,57 @@ +fileFormatVersion: 2 +guid: 2cd4016ef85831541a03ced49e86db76 +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/Assets/TextMesh Pro/Editor Resources/Gizmos/TMP - Input Field Icon.psd b/Assets/TextMesh Pro/Editor Resources/Gizmos/TMP - Input Field Icon.psd new file mode 100644 index 0000000..f0360d3 Binary files /dev/null and b/Assets/TextMesh Pro/Editor Resources/Gizmos/TMP - Input Field Icon.psd differ diff --git a/Assets/TextMesh Pro/Editor Resources/Gizmos/TMP - Input Field Icon.psd.meta b/Assets/TextMesh Pro/Editor Resources/Gizmos/TMP - Input Field Icon.psd.meta new file mode 100644 index 0000000..397eadf --- /dev/null +++ b/Assets/TextMesh Pro/Editor Resources/Gizmos/TMP - Input Field Icon.psd.meta @@ -0,0 +1,57 @@ +fileFormatVersion: 2 +guid: 4a9c98add86d40643accf4d47650ffba +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/Assets/TextMesh Pro/Editor Resources/Gizmos/TMP - Sprite Asset Icon.psd b/Assets/TextMesh Pro/Editor Resources/Gizmos/TMP - Sprite Asset Icon.psd new file mode 100644 index 0000000..7036296 Binary files /dev/null and b/Assets/TextMesh Pro/Editor Resources/Gizmos/TMP - Sprite Asset Icon.psd differ diff --git a/Assets/TextMesh Pro/Editor Resources/Gizmos/TMP - Sprite Asset Icon.psd.meta b/Assets/TextMesh Pro/Editor Resources/Gizmos/TMP - Sprite Asset Icon.psd.meta new file mode 100644 index 0000000..15a944b --- /dev/null +++ b/Assets/TextMesh Pro/Editor Resources/Gizmos/TMP - Sprite Asset Icon.psd.meta @@ -0,0 +1,57 @@ +fileFormatVersion: 2 +guid: 262bfc9a44ca0f74f9563a2deea91648 +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/Assets/TextMesh Pro/Editor Resources/Gizmos/TMP - Text Component Icon.psd b/Assets/TextMesh Pro/Editor Resources/Gizmos/TMP - Text Component Icon.psd new file mode 100644 index 0000000..3cc4163 Binary files /dev/null and b/Assets/TextMesh Pro/Editor Resources/Gizmos/TMP - Text Component Icon.psd differ diff --git a/Assets/TextMesh Pro/Editor Resources/Gizmos/TMP - Text Component Icon.psd.meta b/Assets/TextMesh Pro/Editor Resources/Gizmos/TMP - Text Component Icon.psd.meta new file mode 100644 index 0000000..34a01c2 --- /dev/null +++ b/Assets/TextMesh Pro/Editor Resources/Gizmos/TMP - Text Component Icon.psd.meta @@ -0,0 +1,53 @@ +fileFormatVersion: 2 +guid: 1774381ab87c85f44ad56fcede06515e +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/Assets/TextMesh Pro/Editor Resources/Shaders.meta b/Assets/TextMesh Pro/Editor Resources/Shaders.meta new file mode 100644 index 0000000..a5f7810 --- /dev/null +++ b/Assets/TextMesh Pro/Editor Resources/Shaders.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 54cf5388b8417094eacc81c930744fab +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TextMesh Pro/Editor Resources/Shaders/TMP_Properties.cginc b/Assets/TextMesh Pro/Editor Resources/Shaders/TMP_Properties.cginc new file mode 100644 index 0000000..2e96258 --- /dev/null +++ b/Assets/TextMesh Pro/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/Assets/TextMesh Pro/Editor Resources/Shaders/TMP_Properties.cginc.meta b/Assets/TextMesh Pro/Editor Resources/Shaders/TMP_Properties.cginc.meta new file mode 100644 index 0000000..174f7a0 --- /dev/null +++ b/Assets/TextMesh Pro/Editor Resources/Shaders/TMP_Properties.cginc.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 5abdb6015a0833c48a9800e7a2b8e1eb +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TextMesh Pro/Editor Resources/Shaders/TMP_SDF Internal Editor.shader b/Assets/TextMesh Pro/Editor Resources/Shaders/TMP_SDF Internal Editor.shader new file mode 100644 index 0000000..baf4501 --- /dev/null +++ b/Assets/TextMesh Pro/Editor Resources/Shaders/TMP_SDF Internal Editor.shader @@ -0,0 +1,75 @@ +// Simplified SDF shader: +// - No Shading Option (bevel / bump / env map) +// - No Glow Option +// - Softness is applied on both side of the outline + +Shader "Hidden/TMP/Internal/Editor/Distance Field SSD" { + + Properties{ + _FaceColor("Face Color", Color) = (1,1,1,1) + _FaceDilate("Face Dilate", Range(-1,1)) = 0 + + _OutlineColor("Outline Color", Color) = (0,0,0,1) + _OutlineWidth("Outline Thickness", Range(0,1)) = 0 + _OutlineSoftness("Outline Softness", Range(0,1)) = 0 + + _UnderlayColor("Border Color", Color) = (0,0,0,.5) + _UnderlayOffsetX("Border OffsetX", Range(-1,1)) = 0 + _UnderlayOffsetY("Border OffsetY", Range(-1,1)) = 0 + _UnderlayDilate("Border Dilate", Range(-1,1)) = 0 + _UnderlaySoftness("Border Softness", Range(0,1)) = 0 + + _WeightNormal("Weight Normal", float) = 0 + _WeightBold("Weight Bold", float) = .5 + + _ShaderFlags("Flags", float) = 0 + _ScaleRatioA("Scale RatioA", float) = 1 + _ScaleRatioB("Scale RatioB", float) = 1 + _ScaleRatioC("Scale RatioC", float) = 1 + + _MainTex("Font Atlas", 2D) = "white" {} + _TextureWidth("Texture Width", float) = 1024 + _TextureHeight("Texture Height", float) = 1024 + _GradientScale("Gradient Scale", float) = 1 + _ScaleX("Scale X", float) = 1 + _ScaleY("Scale Y", float) = 1 + _PerspectiveFilter("Perspective Correction", Range(0, 1)) = 0.875 + _Sharpness("Sharpness", Range(-1,1)) = 0 + + _VertexOffsetX("Vertex OffsetX", float) = 0 + _VertexOffsetY("Vertex OffsetY", float) = 0 + } + + SubShader + { + Tags + { + "ForceSupported" = "True" + } + + Lighting Off + Blend One OneMinusSrcAlpha + Cull Off + ZWrite Off + ZTest Always + + Pass + { + CGPROGRAM + #pragma vertex VertShader + #pragma fragment PixShader + #pragma shader_feature __ OUTLINE_ON + #pragma shader_feature __ UNDERLAY_ON UNDERLAY_INNER + + #include "UnityCG.cginc" + #include "UnityUI.cginc" + #include "TMP_Properties.cginc" + + #include "TMP_SDF_SSD.cginc" + + ENDCG + } + } + + CustomEditor "TMPro.EditorUtilities.TMP_SDFShaderGUI" +} diff --git a/Assets/TextMesh Pro/Editor Resources/Shaders/TMP_SDF Internal Editor.shader.meta b/Assets/TextMesh Pro/Editor Resources/Shaders/TMP_SDF Internal Editor.shader.meta new file mode 100644 index 0000000..f43e71e --- /dev/null +++ b/Assets/TextMesh Pro/Editor Resources/Shaders/TMP_SDF Internal Editor.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: ca3b9025f140ce049a1d378440734832 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TextMesh Pro/Editor Resources/Shaders/TMP_SDF_SSD.cginc b/Assets/TextMesh Pro/Editor Resources/Shaders/TMP_SDF_SSD.cginc new file mode 100644 index 0000000..b16f269 --- /dev/null +++ b/Assets/TextMesh Pro/Editor Resources/Shaders/TMP_SDF_SSD.cginc @@ -0,0 +1,132 @@ +struct vertex_t +{ + float4 position : POSITION; + float3 normal : NORMAL; + float4 color : COLOR; + float4 texcoord0 : TEXCOORD0; + float2 texcoord1 : TEXCOORD1; +}; + +struct pixel_t +{ + float4 position : SV_POSITION; + float4 faceColor : COLOR; + float4 outlineColor : COLOR1; + float2 texcoord0 : TEXCOORD0; + float4 param : TEXCOORD1; // weight, scaleRatio + float2 clipUV : TEXCOORD2; + #if (UNDERLAY_ON || UNDERLAY_INNER) + float4 texcoord2 : TEXCOORD3; + float4 underlayColor : COLOR2; + #endif +}; + +sampler2D _GUIClipTexture; +uniform float4x4 unity_GUIClipTextureMatrix; +float4 _MainTex_TexelSize; + +float4 SRGBToLinear(float4 rgba) +{ + return float4(lerp(rgba.rgb / 12.92f, pow((rgba.rgb + 0.055f) / 1.055f, 2.4f), step(0.04045f, rgba.rgb)), rgba.a); +} + +pixel_t VertShader(vertex_t input) +{ + pixel_t output; + + float bold = step(input.texcoord0.w, 0); + + float4 vert = input.position; + vert.x += _VertexOffsetX; + vert.y += _VertexOffsetY; + + float4 vPosition = UnityObjectToClipPos(vert); + + float weight = lerp(_WeightNormal, _WeightBold, bold) / 4.0; + weight = (weight + _FaceDilate) * _ScaleRatioA * 0.5; + + // Generate UV for the Clip Texture + float3 eyePos = UnityObjectToViewPos(input.position); + float2 clipUV = mul(unity_GUIClipTextureMatrix, float4(eyePos.xy, 0, 1.0)); + + float4 color = input.color; + #if (FORCE_LINEAR && !UNITY_COLORSPACE_GAMMA) + color = SRGBToLinear(input.color); + #endif + + float opacity = color.a; + #if (UNDERLAY_ON | UNDERLAY_INNER) + opacity = 1.0; + #endif + + float4 faceColor = float4(color.rgb, opacity) * _FaceColor; + faceColor.rgb *= faceColor.a; + + float4 outlineColor = _OutlineColor; + outlineColor.a *= opacity; + outlineColor.rgb *= outlineColor.a; + + output.position = vPosition; + output.faceColor = faceColor; + output.outlineColor = outlineColor; + output.texcoord0 = float2(input.texcoord0.xy); + output.param = float4(0.5 - weight, 1.3333 * _GradientScale * (_Sharpness + 1) / _MainTex_TexelSize.z , _OutlineWidth * _ScaleRatioA * 0.5, 0); + output.clipUV = clipUV; + + #if (UNDERLAY_ON || UNDERLAY_INNER) + float4 underlayColor = _UnderlayColor; + underlayColor.rgb *= underlayColor.a; + + float x = -(_UnderlayOffsetX * _ScaleRatioC) * _GradientScale / _MainTex_TexelSize.z; + float y = -(_UnderlayOffsetY * _ScaleRatioC) * _GradientScale / _MainTex_TexelSize.w; + + output.texcoord2 = float4(input.texcoord0 + float2(x, y), input.color.a, 0); + output.underlayColor = underlayColor; + #endif + + return output; +} + +float4 PixShader(pixel_t input) : SV_Target +{ + float d = tex2D(_MainTex, input.texcoord0.xy).a; + + float2 UV = input.texcoord0.xy; + float scale = rsqrt(abs(ddx(UV.x) * ddy(UV.y) - ddy(UV.x) * ddx(UV.y))) * input.param.y; + + #if (UNDERLAY_ON | UNDERLAY_INNER) + float layerScale = scale; + layerScale /= 1 + ((_UnderlaySoftness * _ScaleRatioC) * layerScale); + float layerBias = input.param.x * layerScale - .5 - ((_UnderlayDilate * _ScaleRatioC) * .5 * layerScale); + #endif + + scale /= 1 + (_OutlineSoftness * _ScaleRatioA * scale); + + float4 faceColor = input.faceColor * saturate((d - input.param.x) * scale + 0.5); + + #ifdef OUTLINE_ON + float4 outlineColor = lerp(input.faceColor, input.outlineColor, sqrt(min(1.0, input.param.z * scale * 2))); + faceColor = lerp(outlineColor, input.faceColor, saturate((d - input.param.x - input.param.z) * scale + 0.5)); + faceColor *= saturate((d - input.param.x + input.param.z) * scale + 0.5); + #endif + + #if UNDERLAY_ON + d = tex2D(_MainTex, input.texcoord2.xy).a * layerScale; + faceColor += float4(_UnderlayColor.rgb * _UnderlayColor.a, _UnderlayColor.a) * saturate(d - layerBias) * (1 - faceColor.a); + #endif + + #if UNDERLAY_INNER + float bias = input.param.x * scale - 0.5; + float sd = saturate(d * scale - bias - input.param.z); + d = tex2D(_MainTex, input.texcoord2.xy).a * layerScale; + faceColor += float4(_UnderlayColor.rgb * _UnderlayColor.a, _UnderlayColor.a) * (1 - saturate(d - layerBias)) * sd * (1 - faceColor.a); + #endif + + #if (UNDERLAY_ON | UNDERLAY_INNER) + faceColor *= input.texcoord2.z; + #endif + + faceColor *= tex2D(_GUIClipTexture, input.clipUV).a; + + return faceColor; +} diff --git a/Assets/TextMesh Pro/Editor Resources/Shaders/TMP_SDF_SSD.cginc.meta b/Assets/TextMesh Pro/Editor Resources/Shaders/TMP_SDF_SSD.cginc.meta new file mode 100644 index 0000000..6d09de8 --- /dev/null +++ b/Assets/TextMesh Pro/Editor Resources/Shaders/TMP_SDF_SSD.cginc.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: cebea68575f67064f96951c387311479 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TextMesh Pro/Editor Resources/Textures.meta b/Assets/TextMesh Pro/Editor Resources/Textures.meta new file mode 100644 index 0000000..0b524b8 --- /dev/null +++ b/Assets/TextMesh Pro/Editor Resources/Textures.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8a4406749db485641a802331b0cbfa4e +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TextMesh Pro/Editor Resources/Textures/SectionHeader_Dark.psd b/Assets/TextMesh Pro/Editor Resources/Textures/SectionHeader_Dark.psd new file mode 100644 index 0000000..8ebaa27 Binary files /dev/null and b/Assets/TextMesh Pro/Editor Resources/Textures/SectionHeader_Dark.psd differ diff --git a/Assets/TextMesh Pro/Editor Resources/Textures/SectionHeader_Dark.psd.meta b/Assets/TextMesh Pro/Editor Resources/Textures/SectionHeader_Dark.psd.meta new file mode 100644 index 0000000..be40276 --- /dev/null +++ b/Assets/TextMesh Pro/Editor Resources/Textures/SectionHeader_Dark.psd.meta @@ -0,0 +1,53 @@ +fileFormatVersion: 2 +guid: 41546e97322eff343a6d1244de178a5d +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/Assets/TextMesh Pro/Editor Resources/Textures/SectionHeader_Light.psd b/Assets/TextMesh Pro/Editor Resources/Textures/SectionHeader_Light.psd new file mode 100644 index 0000000..e598e6d Binary files /dev/null and b/Assets/TextMesh Pro/Editor Resources/Textures/SectionHeader_Light.psd differ diff --git a/Assets/TextMesh Pro/Editor Resources/Textures/SectionHeader_Light.psd.meta b/Assets/TextMesh Pro/Editor Resources/Textures/SectionHeader_Light.psd.meta new file mode 100644 index 0000000..0c1f189 --- /dev/null +++ b/Assets/TextMesh Pro/Editor Resources/Textures/SectionHeader_Light.psd.meta @@ -0,0 +1,53 @@ +fileFormatVersion: 2 +guid: bcac79c55067867468844f63cd98df00 +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/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignBaseLine.psd b/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignBaseLine.psd new file mode 100644 index 0000000..3da358a Binary files /dev/null and b/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignBaseLine.psd differ diff --git a/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignBaseLine.psd.meta b/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignBaseLine.psd.meta new file mode 100644 index 0000000..0b00137 --- /dev/null +++ b/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignBaseLine.psd.meta @@ -0,0 +1,53 @@ +fileFormatVersion: 2 +guid: 5a12d249eb330f040954fd6351b13b83 +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/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignBaseLine_Light.psd b/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignBaseLine_Light.psd new file mode 100644 index 0000000..cf49b6c Binary files /dev/null and b/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignBaseLine_Light.psd differ diff --git a/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignBaseLine_Light.psd.meta b/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignBaseLine_Light.psd.meta new file mode 100644 index 0000000..b38f40d --- /dev/null +++ b/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignBaseLine_Light.psd.meta @@ -0,0 +1,53 @@ +fileFormatVersion: 2 +guid: 8ec46732371553e459edb3ec3969f87a +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/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignBottom.psd b/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignBottom.psd new file mode 100644 index 0000000..1f35779 Binary files /dev/null and b/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignBottom.psd differ diff --git a/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignBottom.psd.meta b/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignBottom.psd.meta new file mode 100644 index 0000000..255a265 --- /dev/null +++ b/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignBottom.psd.meta @@ -0,0 +1,53 @@ +fileFormatVersion: 2 +guid: 1b8d5ff08a2b895429463074c8073a4d +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/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignBottom_Light.psd b/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignBottom_Light.psd new file mode 100644 index 0000000..d8af55b Binary files /dev/null and b/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignBottom_Light.psd differ diff --git a/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignBottom_Light.psd.meta b/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignBottom_Light.psd.meta new file mode 100644 index 0000000..6546ee8 --- /dev/null +++ b/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignBottom_Light.psd.meta @@ -0,0 +1,53 @@ +fileFormatVersion: 2 +guid: a4fe7cc4ed1bebd4aa92d476f2bb19ad +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/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignCapLine.psd b/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignCapLine.psd new file mode 100644 index 0000000..7eefe6b Binary files /dev/null and b/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignCapLine.psd differ diff --git a/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignCapLine.psd.meta b/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignCapLine.psd.meta new file mode 100644 index 0000000..02f8319 --- /dev/null +++ b/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignCapLine.psd.meta @@ -0,0 +1,58 @@ +fileFormatVersion: 2 +guid: 536ac717a42c6b041aadc5c80abb8b78 +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/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignCapLine_Light.psd b/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignCapLine_Light.psd new file mode 100644 index 0000000..f08bb6c Binary files /dev/null and b/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignCapLine_Light.psd differ diff --git a/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignCapLine_Light.psd.meta b/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignCapLine_Light.psd.meta new file mode 100644 index 0000000..ef32e40 --- /dev/null +++ b/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignCapLine_Light.psd.meta @@ -0,0 +1,58 @@ +fileFormatVersion: 2 +guid: 2b5e911245fed0646b4cbd12da6985f0 +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/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignCenter.psd b/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignCenter.psd new file mode 100644 index 0000000..939bc6d Binary files /dev/null and b/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignCenter.psd differ diff --git a/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignCenter.psd.meta b/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignCenter.psd.meta new file mode 100644 index 0000000..43c64a7 --- /dev/null +++ b/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignCenter.psd.meta @@ -0,0 +1,53 @@ +fileFormatVersion: 2 +guid: ed5f7584c3aac3744b110dff90e405d4 +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/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignCenterGeo.psd b/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignCenterGeo.psd new file mode 100644 index 0000000..f9ce9a8 Binary files /dev/null and b/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignCenterGeo.psd differ diff --git a/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignCenterGeo.psd.meta b/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignCenterGeo.psd.meta new file mode 100644 index 0000000..6340f1f --- /dev/null +++ b/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignCenterGeo.psd.meta @@ -0,0 +1,56 @@ +fileFormatVersion: 2 +guid: 42b7351f75d64f34781c9eabf90c1215 +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/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignCenterGeo_Light.psd b/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignCenterGeo_Light.psd new file mode 100644 index 0000000..e37b2e2 Binary files /dev/null and b/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignCenterGeo_Light.psd differ diff --git a/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignCenterGeo_Light.psd.meta b/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignCenterGeo_Light.psd.meta new file mode 100644 index 0000000..734dcc5 --- /dev/null +++ b/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignCenterGeo_Light.psd.meta @@ -0,0 +1,56 @@ +fileFormatVersion: 2 +guid: 2f51c7bc5c3fb004698e6d065123b176 +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/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignCenter_Light.psd b/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignCenter_Light.psd new file mode 100644 index 0000000..7274887 Binary files /dev/null and b/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignCenter_Light.psd differ diff --git a/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignCenter_Light.psd.meta b/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignCenter_Light.psd.meta new file mode 100644 index 0000000..5897176 --- /dev/null +++ b/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignCenter_Light.psd.meta @@ -0,0 +1,53 @@ +fileFormatVersion: 2 +guid: d8e76cc9d5068834b8bfb6291eff8d4c +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/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignFlush.psd b/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignFlush.psd new file mode 100644 index 0000000..eeeea67 Binary files /dev/null and b/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignFlush.psd differ diff --git a/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignFlush.psd.meta b/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignFlush.psd.meta new file mode 100644 index 0000000..e953bc8 --- /dev/null +++ b/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignFlush.psd.meta @@ -0,0 +1,53 @@ +fileFormatVersion: 2 +guid: 2597c5156df761e41b7822f01c2b79bf +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/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignFlush_Light.psd b/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignFlush_Light.psd new file mode 100644 index 0000000..b69f6a2 Binary files /dev/null and b/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignFlush_Light.psd differ diff --git a/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignFlush_Light.psd.meta b/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignFlush_Light.psd.meta new file mode 100644 index 0000000..b0995a3 --- /dev/null +++ b/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignFlush_Light.psd.meta @@ -0,0 +1,53 @@ +fileFormatVersion: 2 +guid: 4656f5679b2ff1b4a9824d49afeb9a37 +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/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignJustified.psd b/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignJustified.psd new file mode 100644 index 0000000..3ce55c4 Binary files /dev/null and b/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignJustified.psd differ diff --git a/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignJustified.psd.meta b/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignJustified.psd.meta new file mode 100644 index 0000000..11e43fb --- /dev/null +++ b/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignJustified.psd.meta @@ -0,0 +1,59 @@ +fileFormatVersion: 2 +guid: 5cd08cc744a8aeb47bb60edb1ac5a378 +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/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignJustified_Light.psd b/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignJustified_Light.psd new file mode 100644 index 0000000..d7fd5c8 Binary files /dev/null and b/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignJustified_Light.psd differ diff --git a/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignJustified_Light.psd.meta b/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignJustified_Light.psd.meta new file mode 100644 index 0000000..8b04d6d --- /dev/null +++ b/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignJustified_Light.psd.meta @@ -0,0 +1,59 @@ +fileFormatVersion: 2 +guid: cf9a95600ac47c9439a82c4007f53eed +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/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignLeft.psd b/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignLeft.psd new file mode 100644 index 0000000..fc7e10b Binary files /dev/null and b/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignLeft.psd differ diff --git a/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignLeft.psd.meta b/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignLeft.psd.meta new file mode 100644 index 0000000..38496c1 --- /dev/null +++ b/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignLeft.psd.meta @@ -0,0 +1,53 @@ +fileFormatVersion: 2 +guid: 72f7126753985494e86936354d4d2122 +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/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignLeft_Light.psd b/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignLeft_Light.psd new file mode 100644 index 0000000..5522c37 Binary files /dev/null and b/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignLeft_Light.psd differ diff --git a/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignLeft_Light.psd.meta b/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignLeft_Light.psd.meta new file mode 100644 index 0000000..fc27177 --- /dev/null +++ b/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignLeft_Light.psd.meta @@ -0,0 +1,53 @@ +fileFormatVersion: 2 +guid: 1d8966d1879a0d14ea2e1425a387a1a7 +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/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignMidLine.psd b/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignMidLine.psd new file mode 100644 index 0000000..14d28a2 Binary files /dev/null and b/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignMidLine.psd differ diff --git a/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignMidLine.psd.meta b/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignMidLine.psd.meta new file mode 100644 index 0000000..7802f5e --- /dev/null +++ b/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignMidLine.psd.meta @@ -0,0 +1,58 @@ +fileFormatVersion: 2 +guid: b43415a9d4bfa1e49b7dc578e471e9be +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/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignMiddle.psd b/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignMiddle.psd new file mode 100644 index 0000000..c4483db Binary files /dev/null and b/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignMiddle.psd differ diff --git a/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignMiddle.psd.meta b/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignMiddle.psd.meta new file mode 100644 index 0000000..c5f39c4 --- /dev/null +++ b/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignMiddle.psd.meta @@ -0,0 +1,53 @@ +fileFormatVersion: 2 +guid: 62c9af2994d13984db3b0e5b4ea49429 +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/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignMiddle_Light.psd b/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignMiddle_Light.psd new file mode 100644 index 0000000..4263bf9 Binary files /dev/null and b/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignMiddle_Light.psd differ diff --git a/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignMiddle_Light.psd.meta b/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignMiddle_Light.psd.meta new file mode 100644 index 0000000..4954c5a --- /dev/null +++ b/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignMiddle_Light.psd.meta @@ -0,0 +1,53 @@ +fileFormatVersion: 2 +guid: 0ccb31cd3f7491740b061365dd229ac2 +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/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignMidline_Light.psd b/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignMidline_Light.psd new file mode 100644 index 0000000..a5bed37 Binary files /dev/null and b/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignMidline_Light.psd differ diff --git a/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignMidline_Light.psd.meta b/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignMidline_Light.psd.meta new file mode 100644 index 0000000..91564d2 --- /dev/null +++ b/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignMidline_Light.psd.meta @@ -0,0 +1,58 @@ +fileFormatVersion: 2 +guid: 73c51e53ec5a9f94f90073f2475a4234 +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/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignRight.psd b/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignRight.psd new file mode 100644 index 0000000..4ef1998 Binary files /dev/null and b/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignRight.psd differ diff --git a/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignRight.psd.meta b/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignRight.psd.meta new file mode 100644 index 0000000..796d60e --- /dev/null +++ b/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignRight.psd.meta @@ -0,0 +1,53 @@ +fileFormatVersion: 2 +guid: 933d1b8dcfb561041a0c0e637598aae9 +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/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignRight_Light.psd b/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignRight_Light.psd new file mode 100644 index 0000000..bdeff41 Binary files /dev/null and b/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignRight_Light.psd differ diff --git a/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignRight_Light.psd.meta b/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignRight_Light.psd.meta new file mode 100644 index 0000000..369149c --- /dev/null +++ b/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignRight_Light.psd.meta @@ -0,0 +1,53 @@ +fileFormatVersion: 2 +guid: e6d0c558c2d48ac49806d793bd96a599 +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/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignTop.psd b/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignTop.psd new file mode 100644 index 0000000..b00d458 Binary files /dev/null and b/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignTop.psd differ diff --git a/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignTop.psd.meta b/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignTop.psd.meta new file mode 100644 index 0000000..12ef9c2 --- /dev/null +++ b/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignTop.psd.meta @@ -0,0 +1,53 @@ +fileFormatVersion: 2 +guid: e8037b78e0bc86c49b137c1f644fdadc +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/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignTop_Light.psd b/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignTop_Light.psd new file mode 100644 index 0000000..84f0e61 Binary files /dev/null and b/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignTop_Light.psd differ diff --git a/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignTop_Light.psd.meta b/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignTop_Light.psd.meta new file mode 100644 index 0000000..af18de1 --- /dev/null +++ b/Assets/TextMesh Pro/Editor Resources/Textures/btn_AlignTop_Light.psd.meta @@ -0,0 +1,53 @@ +fileFormatVersion: 2 +guid: ad3c3aac0abe836409f34bcde02494a6 +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/Assets/TextMesh Pro/Scripts.meta b/Assets/TextMesh Pro/Scripts.meta new file mode 100644 index 0000000..76400e6 --- /dev/null +++ b/Assets/TextMesh Pro/Scripts.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 26b31616c8395e84c8101989aae56ba6 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TextMesh Pro/Scripts/Editor.meta b/Assets/TextMesh Pro/Scripts/Editor.meta new file mode 100644 index 0000000..d9f0b5f --- /dev/null +++ b/Assets/TextMesh Pro/Scripts/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 651f9a260a3765242b8026f1d4db06e4 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TextMesh Pro/Scripts/Editor/GlobalSuppressions.cs b/Assets/TextMesh Pro/Scripts/Editor/GlobalSuppressions.cs new file mode 100644 index 0000000..ab6525a --- /dev/null +++ b/Assets/TextMesh Pro/Scripts/Editor/GlobalSuppressions.cs @@ -0,0 +1,30 @@ +// This file is used by Code Analysis to maintain SuppressMessage +// attributes that are applied to this project. +// Project-level suppressions either have no target or are given +// a specific target and scoped to a namespace, type, member, etc. + +using System.Diagnostics.CodeAnalysis; + +[assembly: SuppressMessage("Performance", "UNT0026")] +[assembly: SuppressMessage("Performance", "UNT0035")] +[assembly: SuppressMessage("Style", "IDE0017")] +[assembly: SuppressMessage("Style", "IDE0018")] +[assembly: SuppressMessage("Style", "IDE0031")] +[assembly: SuppressMessage("Style", "IDE0034")] +[assembly: SuppressMessage("Style", "IDE0044")] +[assembly: SuppressMessage("Style", "IDE0051")] +[assembly: SuppressMessage("Style", "IDE0052")] +[assembly: SuppressMessage("Style", "IDE0054")] +[assembly: SuppressMessage("Style", "IDE0057")] +[assembly: SuppressMessage("Style", "IDE0059")] +[assembly: SuppressMessage("Style", "IDE0060")] +[assembly: SuppressMessage("Style", "IDE0063")] +[assembly: SuppressMessage("Style", "IDE0066")] +[assembly: SuppressMessage("Style", "IDE0074")] +[assembly: SuppressMessage("Style", "IDE0075")] +[assembly: SuppressMessage("Style", "IDE0090")] +[assembly: SuppressMessage("Style", "IDE0180")] +[assembly: SuppressMessage("Style", "IDE0251")] +[assembly: SuppressMessage("Style", "IDE1005")] +[assembly: SuppressMessage("Style", "IDE1006")] +[assembly: SuppressMessage("Correctness", "UNT0008", Scope = "member", Target = "~M:TMPro.EditorUtilities.TMP_EditorPanel.OnEnable")] diff --git a/Assets/TextMesh Pro/Scripts/Editor/GlobalSuppressions.cs.meta b/Assets/TextMesh Pro/Scripts/Editor/GlobalSuppressions.cs.meta new file mode 100644 index 0000000..ce4700d --- /dev/null +++ b/Assets/TextMesh Pro/Scripts/Editor/GlobalSuppressions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9e8aa96a139a7414cb4d2031a22588db +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TextMesh Pro/Scripts/Editor/HDRP.meta b/Assets/TextMesh Pro/Scripts/Editor/HDRP.meta new file mode 100644 index 0000000..4081097 --- /dev/null +++ b/Assets/TextMesh Pro/Scripts/Editor/HDRP.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: eecc124dc0b994047aac97ccf8c8ed0a +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TextMesh Pro/Scripts/Editor/HDRP/TMP_BaseHDRPLitShaderGUI.cs b/Assets/TextMesh Pro/Scripts/Editor/HDRP/TMP_BaseHDRPLitShaderGUI.cs new file mode 100644 index 0000000..98dbaad --- /dev/null +++ b/Assets/TextMesh Pro/Scripts/Editor/HDRP/TMP_BaseHDRPLitShaderGUI.cs @@ -0,0 +1,677 @@ +#if HDRP_10_7_OR_NEWER +using UnityEngine; +using UnityEditor; +using UnityEditor.Rendering.HighDefinition; + + +namespace TMPro.EditorUtilities +{ + /// Base class for TextMesh Pro shader GUIs. + internal abstract class TMP_BaseHDRPLitShaderGUI : LightingShaderGraphGUI + { + /// Representation of a #pragma shader_feature. + /// It is assumed that the first feature option is for no keyword (underscores). + protected class ShaderFeature + { + public string undoLabel; + + public GUIContent label; + + /// The keyword labels, for display. Include the no-keyword as the first option. + public GUIContent[] keywordLabels; + + /// The shader keywords. Exclude the no-keyword option. + 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") + }; + + protected static GUIContent[] s_CullingTypeLabels = + { + new GUIContent("Off"), + new GUIContent("Front"), + new GUIContent("Back") + }; + + static TMP_BaseHDRPLitShaderGUI() + { + // 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; + } + + protected override void OnMaterialGUI(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(); + } + + /// Override this method to create the specific shader GUI. + protected abstract void DoGUI(); + + static string[] s_PanelStateLabel = new string[] { "\t- Click to collapse -", "\t- Click to expand -" }; + + protected bool BeginPanel(string panel, bool expanded) + { + EditorGUI.indentLevel = 0; + + 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) + { + EditorGUI.indentLevel = 0; + + 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; + } + + protected 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) + { + float objFieldSize = 60f; + bool smallLayout = EditorGUIUtility.currentViewWidth <= 440f && (withTilingOffset || speedNames != null); + float controlHeight = smallLayout ? objFieldSize * 2 : objFieldSize; + + MaterialProperty property = FindProperty(name, m_Properties); + m_Editor.BeginAnimatedCheck(Rect.zero, property); + + Rect rect = EditorGUILayout.GetControlRect(true, controlHeight); + float totalWidth = rect.width; + rect.width = EditorGUIUtility.labelWidth + objFieldSize; + rect.height = objFieldSize; + s_TempLabel.text = label; + + EditorGUI.BeginChangeCheck(); + Object tex = EditorGUI.ObjectField(rect, s_TempLabel, property.textureValue, type, false); + if (EditorGUI.EndChangeCheck()) + { + property.textureValue = tex as Texture; + } + + float additionalHeight = controlHeight - objFieldSize; + float xOffset = smallLayout ? rect.width - objFieldSize : rect.width; + + rect.y += additionalHeight; + rect.x += xOffset; + rect.width = totalWidth - xOffset; + rect.height = EditorGUIUtility.singleLineHeight; + + if (withTilingOffset) + { + DoTilingOffset(rect, property); + rect.y += (rect.height + 2f) * 2f; + } + + m_Editor.EndAnimatedCheck(); + + 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.40f); + + 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 (EditorGUI.EndChangeCheck()) + { + 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 (EditorGUI.EndChangeCheck()) + { + vector.z = values[0]; + vector.w = values[1]; + changed = true; + } + + if (changed) + { + property.textureScaleAndOffset = vector; + } + + EditorGUIUtility.labelWidth = labelWidth; + EditorGUI.indentLevel = indentLevel; + } + + 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.40f); + + s_TempLabel.text = "Speed"; + rect = EditorGUI.PrefixLabel(rect, s_TempLabel); + + EditorGUIUtility.labelWidth = 10f; + rect.width = rect.width * 0.5f - 2f; + + if (names.Length == 1) + { + DoFloat2(rect, names[0]); + } + else + { + DoFloat(rect, names[0], "X"); + rect.x += rect.width + 4f; + 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, false, true, true); + 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; + } + } + + void DoFloat2(Rect rect, string name) + { + MaterialProperty property = BeginProperty(name); + + float x = EditorGUI.FloatField(rect, "X", property.vectorValue.x); + rect.x += rect.width + 4f; + float y = EditorGUI.FloatField(rect, "Y", property.vectorValue.y); + + if (EndProperty()) + { + property.vectorValue = new Vector2(x, y); + } + } + + protected void DoOffset(string name, string label) + { + MaterialProperty property = BeginProperty(name); + s_TempLabel.text = label; + Vector2 value = EditorGUI.Vector2Field(EditorGUILayout.GetControlRect(), s_TempLabel, property.vectorValue); + if (EndProperty()) + { + property.vectorValue = 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 DoSlider(string name, Vector2 range, string label) + { + MaterialProperty property = BeginProperty(name); + 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 DoSlider(string propertyName, string propertyField, string label) + { + MaterialProperty property = BeginProperty(propertyName); + Vector2 range = property.rangeLimits; + s_TempLabel.text = label; + + Vector4 value = property.vectorValue; + + switch (propertyField) + { + case "X": + value.x = EditorGUI.Slider(EditorGUILayout.GetControlRect(), s_TempLabel, value.x, range.x, range.y); + break; + case "Y": + value.y = EditorGUI.Slider(EditorGUILayout.GetControlRect(), s_TempLabel, value.y, range.x, range.y); + break; + case "Z": + value.z = EditorGUI.Slider(EditorGUILayout.GetControlRect(), s_TempLabel, value.z, range.x, range.y); + break; + case "W": + value.w = EditorGUI.Slider(EditorGUILayout.GetControlRect(), s_TempLabel, value.w, range.x, range.y); + break; + } + + if (EndProperty()) + { + property.vectorValue = value; + } + } + + protected void DoSlider(string propertyName, string propertyField, Vector2 range, string label) + { + MaterialProperty property = BeginProperty(propertyName); + s_TempLabel.text = label; + + Vector4 value = property.vectorValue; + + switch (propertyField) + { + case "X": + value.x = EditorGUI.Slider(EditorGUILayout.GetControlRect(), s_TempLabel, value.x, range.x, range.y); + break; + case "Y": + value.y = EditorGUI.Slider(EditorGUILayout.GetControlRect(), s_TempLabel, value.y, range.x, range.y); + break; + case "Z": + value.z = EditorGUI.Slider(EditorGUILayout.GetControlRect(), s_TempLabel, value.z, range.x, range.y); + break; + case "W": + value.w = EditorGUI.Slider(EditorGUILayout.GetControlRect(), s_TempLabel, value.w, range.x, range.y); + break; + } + + if (EndProperty()) + { + property.vectorValue = value; + } + } + + protected void DoVector2(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 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(); + 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); + } + } + } +} +#endif diff --git a/Assets/TextMesh Pro/Scripts/Editor/HDRP/TMP_BaseHDRPLitShaderGUI.cs.meta b/Assets/TextMesh Pro/Scripts/Editor/HDRP/TMP_BaseHDRPLitShaderGUI.cs.meta new file mode 100644 index 0000000..6520fed --- /dev/null +++ b/Assets/TextMesh Pro/Scripts/Editor/HDRP/TMP_BaseHDRPLitShaderGUI.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: e3795795b029fde4395e6953ce72b5a6 +timeCreated: 1469844810 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TextMesh Pro/Scripts/Editor/HDRP/TMP_BaseHDRPUnlitShaderGUI.cs b/Assets/TextMesh Pro/Scripts/Editor/HDRP/TMP_BaseHDRPUnlitShaderGUI.cs new file mode 100644 index 0000000..2843d22 --- /dev/null +++ b/Assets/TextMesh Pro/Scripts/Editor/HDRP/TMP_BaseHDRPUnlitShaderGUI.cs @@ -0,0 +1,681 @@ +#if HDRP_10_7_OR_NEWER +using UnityEngine; +using UnityEditor; +using UnityEditor.Rendering.HighDefinition; + + +namespace TMPro.EditorUtilities +{ + /// Base class for TextMesh Pro shader GUIs. + #if HDRP_11_OR_NEWER + internal abstract class TMP_BaseHDRPUnlitShaderGUI : UnlitShaderGraphGUI + #else + internal abstract class TMP_BaseHDRPUnlitShaderGUI : HDUnlitGUI + #endif + { + /// Representation of a #pragma shader_feature. + /// It is assumed that the first feature option is for no keyword (underscores). + protected class ShaderFeature + { + public string undoLabel; + + public GUIContent label; + + /// The keyword labels, for display. Include the no-keyword as the first option. + public GUIContent[] keywordLabels; + + /// The shader keywords. Exclude the no-keyword option. + 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") + }; + + protected static GUIContent[] s_CullingTypeLabels = + { + new GUIContent("Off"), + new GUIContent("Front"), + new GUIContent("Back") + }; + + static TMP_BaseHDRPUnlitShaderGUI() + { + // 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; + } + + protected override void OnMaterialGUI(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(); + } + + /// Override this method to create the specific shader GUI. + protected abstract void DoGUI(); + + static string[] s_PanelStateLabel = new string[] { "\t- Click to collapse -", "\t- Click to expand -" }; + + protected bool BeginPanel(string panel, bool expanded) + { + EditorGUI.indentLevel = 0; + + 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) + { + EditorGUI.indentLevel = 0; + + 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; + } + + protected 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) + { + float objFieldSize = 60f; + bool smallLayout = EditorGUIUtility.currentViewWidth <= 440f && (withTilingOffset || speedNames != null); + float controlHeight = smallLayout ? objFieldSize * 2 : objFieldSize; + + MaterialProperty property = FindProperty(name, m_Properties); + m_Editor.BeginAnimatedCheck(Rect.zero, property); + + Rect rect = EditorGUILayout.GetControlRect(true, controlHeight); + float totalWidth = rect.width; + rect.width = EditorGUIUtility.labelWidth + objFieldSize; + rect.height = objFieldSize; + s_TempLabel.text = label; + + EditorGUI.BeginChangeCheck(); + Object tex = EditorGUI.ObjectField(rect, s_TempLabel, property.textureValue, type, false); + if (EditorGUI.EndChangeCheck()) + { + property.textureValue = tex as Texture; + } + + float additionalHeight = controlHeight - objFieldSize; + float xOffset = smallLayout ? rect.width - objFieldSize : rect.width; + + rect.y += additionalHeight; + rect.x += xOffset; + rect.width = totalWidth - xOffset; + rect.height = EditorGUIUtility.singleLineHeight; + + if (withTilingOffset) + { + DoTilingOffset(rect, property); + rect.y += (rect.height + 2f) * 2f; + } + + m_Editor.EndAnimatedCheck(); + + 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.40f); + + 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 (EditorGUI.EndChangeCheck()) + { + 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 (EditorGUI.EndChangeCheck()) + { + vector.z = values[0]; + vector.w = values[1]; + changed = true; + } + + if (changed) + { + property.textureScaleAndOffset = vector; + } + + EditorGUIUtility.labelWidth = labelWidth; + EditorGUI.indentLevel = indentLevel; + } + + 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.40f); + + s_TempLabel.text = "Speed"; + rect = EditorGUI.PrefixLabel(rect, s_TempLabel); + + EditorGUIUtility.labelWidth = 10f; + rect.width = rect.width * 0.5f - 2f; + + if (names.Length == 1) + { + DoFloat2(rect, names[0]); + } + else + { + DoFloat(rect, names[0], "X"); + rect.x += rect.width + 4f; + 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, false, true, true); + 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; + } + } + + void DoFloat2(Rect rect, string name) + { + MaterialProperty property = BeginProperty(name); + + float x = EditorGUI.FloatField(rect, "X", property.vectorValue.x); + rect.x += rect.width + 4f; + float y = EditorGUI.FloatField(rect, "Y", property.vectorValue.y); + + if (EndProperty()) + { + property.vectorValue = new Vector2(x, y); + } + } + + protected void DoOffset(string name, string label) + { + MaterialProperty property = BeginProperty(name); + s_TempLabel.text = label; + Vector2 value = EditorGUI.Vector2Field(EditorGUILayout.GetControlRect(), s_TempLabel, property.vectorValue); + if (EndProperty()) + { + property.vectorValue = 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 DoSlider(string name, Vector2 range, string label) + { + MaterialProperty property = BeginProperty(name); + 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 DoSlider(string propertyName, string propertyField, string label) + { + MaterialProperty property = BeginProperty(propertyName); + Vector2 range = property.rangeLimits; + s_TempLabel.text = label; + + Vector4 value = property.vectorValue; + + switch (propertyField) + { + case "X": + value.x = EditorGUI.Slider(EditorGUILayout.GetControlRect(), s_TempLabel, value.x, range.x, range.y); + break; + case "Y": + value.y = EditorGUI.Slider(EditorGUILayout.GetControlRect(), s_TempLabel, value.y, range.x, range.y); + break; + case "Z": + value.z = EditorGUI.Slider(EditorGUILayout.GetControlRect(), s_TempLabel, value.z, range.x, range.y); + break; + case "W": + value.w = EditorGUI.Slider(EditorGUILayout.GetControlRect(), s_TempLabel, value.w, range.x, range.y); + break; + } + + if (EndProperty()) + { + property.vectorValue = value; + } + } + + protected void DoSlider(string propertyName, string propertyField, Vector2 range, string label) + { + MaterialProperty property = BeginProperty(propertyName); + s_TempLabel.text = label; + + Vector4 value = property.vectorValue; + + switch (propertyField) + { + case "X": + value.x = EditorGUI.Slider(EditorGUILayout.GetControlRect(), s_TempLabel, value.x, range.x, range.y); + break; + case "Y": + value.y = EditorGUI.Slider(EditorGUILayout.GetControlRect(), s_TempLabel, value.y, range.x, range.y); + break; + case "Z": + value.z = EditorGUI.Slider(EditorGUILayout.GetControlRect(), s_TempLabel, value.z, range.x, range.y); + break; + case "W": + value.w = EditorGUI.Slider(EditorGUILayout.GetControlRect(), s_TempLabel, value.w, range.x, range.y); + break; + } + + if (EndProperty()) + { + property.vectorValue = value; + } + } + + protected void DoVector2(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 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(); + 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); + } + } + } +} +#endif diff --git a/Assets/TextMesh Pro/Scripts/Editor/HDRP/TMP_BaseHDRPUnlitShaderGUI.cs.meta b/Assets/TextMesh Pro/Scripts/Editor/HDRP/TMP_BaseHDRPUnlitShaderGUI.cs.meta new file mode 100644 index 0000000..e7f11a6 --- /dev/null +++ b/Assets/TextMesh Pro/Scripts/Editor/HDRP/TMP_BaseHDRPUnlitShaderGUI.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 645409e9544820042937871953f20509 +timeCreated: 1469844810 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TextMesh Pro/Scripts/Editor/HDRP/TMP_SDF_HDRPLitShaderGUI.cs b/Assets/TextMesh Pro/Scripts/Editor/HDRP/TMP_SDF_HDRPLitShaderGUI.cs new file mode 100644 index 0000000..f7f0fd2 --- /dev/null +++ b/Assets/TextMesh Pro/Scripts/Editor/HDRP/TMP_SDF_HDRPLitShaderGUI.cs @@ -0,0 +1,631 @@ +#if HDRP_10_7_OR_NEWER +using UnityEngine; +using UnityEditor; + +using UnityEditor.Rendering.HighDefinition; + +namespace TMPro.EditorUtilities +{ + internal class TMP_SDF_HDRPLitShaderGUI : TMP_BaseHDRPLitShaderGUI + { + static ShaderFeature s_OutlineFeature, s_UnderlayFeature, s_BevelFeature, s_GlowFeature, s_MaskFeature; + + static bool s_Face = true, s_Outline = true, s_Outline2 = true, s_Outline3 = true, s_Underlay = true, s_Lighting = true, s_Glow, s_Bevel, s_Light, s_Bump, s_Env; + + static string[] + s_FaceUVSpeedName = { "_FaceUVSpeed" }, + s_FaceUvSpeedNames = { "_FaceUVSpeedX", "_FaceUVSpeedY" }, + s_OutlineUvSpeedNames = { "_OutlineUVSpeedX", "_OutlineUVSpeedY" }, + s_OutlineUvSpeedName = { "_OutlineUVSpeed" }; + + /// + /// + /// + static TMP_SDF_HDRPLitShaderGUI() + { + 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") + } + }; + } + + /// + /// + /// + public TMP_SDF_HDRPLitShaderGUI() + { + // Remove the ShaderGraphUIBlock to avoid having duplicated properties in the UI. + uiBlocks.RemoveAll(b => b is ShaderGraphUIBlock); + } + + protected override void DoGUI() + { + s_Face = BeginPanel("Face", s_Face); + if (s_Face) + { + DoFacePanel(); + } + + EndPanel(); + + // Outline panels + DoOutlinePanels(); + + // Underlay panel + s_Underlay = BeginPanel("Underlay", s_Underlay); + if (s_Underlay) + { + DoUnderlayPanel(); + } + + EndPanel(); + + // Lighting panel + DrawLightingPanel(); + + /* + 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) + { + DoDebugPanelSRP(); + } + EndPanel(); + + EditorGUILayout.Space(); + EditorGUILayout.Space(); + + // Draw HDRP panels + uiBlocks.OnGUI(m_Editor, m_Properties); + #if HDRP_12_OR_NEWER + ValidateMaterial(m_Material); + #else + SetupMaterialKeywordsAndPass(m_Material); + #endif + } + + 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 if (m_Material.HasProperty("_FaceUVSpeed")) + { + DoTexture2D("_FaceTex", "Texture", true, s_FaceUVSpeedName); + } + else + { + DoTexture2D("_FaceTex", "Texture", true); + } + } + + if (m_Material.HasProperty("_Softness")) + { + DoSlider("_Softness", "X", new Vector2(0, 1), "Softness"); + } + + if (m_Material.HasProperty("_OutlineSoftness")) + { + DoSlider("_OutlineSoftness", "Softness"); + } + + if (m_Material.HasProperty(ShaderUtilities.ID_FaceDilate)) + { + DoSlider("_FaceDilate", "Dilate"); + if (m_Material.HasProperty(ShaderUtilities.ID_Shininess)) + { + DoSlider("_FaceShininess", "Gloss"); + } + } + + if (m_Material.HasProperty(ShaderUtilities.ID_IsoPerimeter)) + { + DoSlider("_IsoPerimeter", "X", new Vector2(-1, 1), "Dilate"); + } + + EditorGUI.indentLevel -= 1; + EditorGUILayout.Space(); + } + + void DoOutlinePanels() + { + s_Outline = BeginPanel("Outline 1", s_Outline); + if (s_Outline) + DoOutlinePanelWithTexture(1, "Y", "Color"); + + EndPanel(); + + s_Outline2 = BeginPanel("Outline 2", s_Outline2); + if (s_Outline2) + DoOutlinePanel(2, "Z", "Color"); + + EndPanel(); + + s_Outline3 = BeginPanel("Outline 3", s_Outline3); + if (s_Outline3) + DoOutlinePanel(3, "W", "Color"); + + EndPanel(); + } + + void DoOutlinePanel(int outlineID, string propertyField, string label) + { + EditorGUI.indentLevel += 1; + DoColor("_OutlineColor" + outlineID, label); + + if (outlineID != 3) + DoOffset("_OutlineOffset" + outlineID, "Offset"); + else + { + if (m_Material.GetFloat(ShaderUtilities.ID_OutlineMode) == 0) + DoOffset("_OutlineOffset" + outlineID, "Offset"); + } + + DoSlider("_Softness", propertyField, new Vector2(0, 1), "Softness"); + DoSlider("_IsoPerimeter", propertyField, new Vector2(-1, 1), "Dilate"); + + if (outlineID == 3) + { + DoToggle("_OutlineMode", "Outline Mode"); + } + + if (m_Material.HasProperty("_OutlineShininess")) + { + //DoSlider("_OutlineShininess", "Gloss"); + } + + EditorGUI.indentLevel -= 1; + EditorGUILayout.Space(); + } + + void DoOutlinePanelWithTexture(int outlineID, string propertyField, string label) + { + EditorGUI.indentLevel += 1; + DoColor("_OutlineColor" + outlineID, label); + if (m_Material.HasProperty(ShaderUtilities.ID_OutlineTex)) + { + if (m_Material.HasProperty("_OutlineUVSpeedX")) + { + DoTexture2D("_OutlineTex", "Texture", true, s_OutlineUvSpeedNames); + } + else if (m_Material.HasProperty("_OutlineUVSpeed")) + { + DoTexture2D("_OutlineTex", "Texture", true, s_OutlineUvSpeedName); + } + else + { + DoTexture2D("_OutlineTex", "Texture", true); + } + } + + DoOffset("_OutlineOffset" + outlineID, "Offset"); + DoSlider("_Softness", propertyField, new Vector2(0, 1), "Softness"); + DoSlider("_IsoPerimeter", propertyField, new Vector2(-1, 1), "Dilate"); + + if (m_Material.HasProperty("_OutlineShininess")) + { + //DoSlider("_OutlineShininess", "Gloss"); + } + + EditorGUI.indentLevel -= 1; + EditorGUILayout.Space(); + } + + void DoUnderlayPanel() + { + EditorGUI.indentLevel += 1; + + if (m_Material.HasProperty(ShaderUtilities.ID_IsoPerimeter)) + { + DoColor("_UnderlayColor", "Color"); + DoSlider("_UnderlayOffset", "X", new Vector2(-1, 1), "Offset X"); + DoSlider("_UnderlayOffset", "Y", new Vector2(-1, 1), "Offset Y"); + DoSlider("_UnderlayDilate", new Vector2(-1, 1), "Dilate"); + DoSlider("_UnderlaySoftness", new Vector2(0, 1), "Softness"); + } + else + { + 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 DrawLightingPanel() + { + s_Lighting = BeginPanel("Lighting", 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(); + } + + void DoBevelPanel() + { + EditorGUI.indentLevel += 1; + DoPopup("_BevelType", "Type", s_BevelTypeLabels); + DoSlider("_BevelAmount", "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"); + } + } + + if (m_Material.HasProperty(ShaderUtilities.ShaderTag_CullMode)) + { + EditorGUILayout.Space(); + DoPopup("_CullMode", "Cull Mode", s_CullingTypeLabels); + } + + EditorGUILayout.Space(); + + 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 DoDebugPanelSRP() + { + 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"); + } + } + */ + if (m_Material.HasProperty(ShaderUtilities.ShaderTag_CullMode)) + { + EditorGUILayout.Space(); + DoPopup("_CullMode", "Cull Mode", s_CullingTypeLabels); + } + + EditorGUILayout.Space(); + /* + 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(); + 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); + } + + // protected override void SetupMaterialKeywordsAndPassInternal(Material material) + // { + // BaseLitGUI.SetupBaseLitKeywords(material); + // BaseLitGUI.SetupBaseLitMaterialPass(material); + // } + } +} +#endif diff --git a/Assets/TextMesh Pro/Scripts/Editor/HDRP/TMP_SDF_HDRPLitShaderGUI.cs.meta b/Assets/TextMesh Pro/Scripts/Editor/HDRP/TMP_SDF_HDRPLitShaderGUI.cs.meta new file mode 100644 index 0000000..9fbf55e --- /dev/null +++ b/Assets/TextMesh Pro/Scripts/Editor/HDRP/TMP_SDF_HDRPLitShaderGUI.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 85016528879d5d644981050d1d0a4368 +timeCreated: 1469844718 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TextMesh Pro/Scripts/Editor/HDRP/TMP_SDF_HDRPUnlitShaderGUI.cs b/Assets/TextMesh Pro/Scripts/Editor/HDRP/TMP_SDF_HDRPUnlitShaderGUI.cs new file mode 100644 index 0000000..7482223 --- /dev/null +++ b/Assets/TextMesh Pro/Scripts/Editor/HDRP/TMP_SDF_HDRPUnlitShaderGUI.cs @@ -0,0 +1,642 @@ +#if HDRP_10_7_OR_NEWER +using UnityEngine; +using UnityEditor; + +using UnityEditor.Rendering.HighDefinition; + +namespace TMPro.EditorUtilities +{ + internal class TMP_SDF_HDRPUnlitShaderGUI : TMP_BaseHDRPUnlitShaderGUI + { + #if !HDRP_11_OR_NEWER + const SurfaceOptionUIBlock.Features surfaceOptionFeatures = SurfaceOptionUIBlock.Features.Unlit; + + private readonly MaterialUIBlockList uiBlocks = new MaterialUIBlockList + { + new SurfaceOptionUIBlock(MaterialUIBlock.Expandable.Base, features: surfaceOptionFeatures), + new ShaderGraphUIBlock(MaterialUIBlock.Expandable.ShaderGraph, ShaderGraphUIBlock.Features.Unlit), + new AdvancedOptionsUIBlock(MaterialUIBlock.Expandable.Advance, ~AdvancedOptionsUIBlock.Features.SpecularOcclusion) + }; + #endif + + static ShaderFeature s_OutlineFeature, s_UnderlayFeature, s_BevelFeature, s_GlowFeature, s_MaskFeature; + + static bool s_Face = true, s_Outline = true, s_Outline2 = true, s_Outline3 = true, s_Underlay = true, s_Lighting = true, s_Glow, s_Bevel, s_Light, s_Bump, s_Env; + + static string[] + s_FaceUVSpeedName = { "_FaceUVSpeed" }, + s_FaceUvSpeedNames = { "_FaceUVSpeedX", "_FaceUVSpeedY" }, + s_OutlineUvSpeedNames = { "_OutlineUVSpeedX", "_OutlineUVSpeedY" }, + s_OutlineUvSpeedName = { "_OutlineUVSpeed" }; + + /// + /// + /// + static TMP_SDF_HDRPUnlitShaderGUI() + { + 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") + } + }; + } + + /// + /// + /// + public TMP_SDF_HDRPUnlitShaderGUI() + { + // Remove the ShaderGraphUIBlock to avoid having duplicated properties in the UI. + uiBlocks.RemoveAll(b => b is ShaderGraphUIBlock); + } + + protected override void DoGUI() + { + s_Face = BeginPanel("Face", s_Face); + if (s_Face) + { + DoFacePanel(); + } + + EndPanel(); + + // Outline panels + DoOutlinePanels(); + + // Underlay panel + s_Underlay = BeginPanel("Underlay", s_Underlay); + if (s_Underlay) + { + DoUnderlayPanel(); + } + + EndPanel(); + + // Lighting panel + DrawLightingPanel(); + + /* + 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) + { + DoDebugPanelSRP(); + } + EndPanel(); + + EditorGUILayout.Space(); + EditorGUILayout.Space(); + + // Draw HDRP panels + uiBlocks.OnGUI(m_Editor, m_Properties); + #if HDRP_12_OR_NEWER + ValidateMaterial(m_Material); + #else + SetupMaterialKeywordsAndPass(m_Material); + #endif + } + + 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 if (m_Material.HasProperty("_FaceUVSpeed")) + { + DoTexture2D("_FaceTex", "Texture", true, s_FaceUVSpeedName); + } + else + { + DoTexture2D("_FaceTex", "Texture", true); + } + } + + if (m_Material.HasProperty("_Softness")) + { + DoSlider("_Softness", "X", new Vector2(0, 1), "Softness"); + } + + if (m_Material.HasProperty("_OutlineSoftness")) + { + DoSlider("_OutlineSoftness", "Softness"); + } + + if (m_Material.HasProperty(ShaderUtilities.ID_FaceDilate)) + { + DoSlider("_FaceDilate", "Dilate"); + if (m_Material.HasProperty(ShaderUtilities.ID_Shininess)) + { + DoSlider("_FaceShininess", "Gloss"); + } + } + + if (m_Material.HasProperty(ShaderUtilities.ID_IsoPerimeter)) + { + DoSlider("_IsoPerimeter", "X", new Vector2(-1, 1), "Dilate"); + } + + EditorGUI.indentLevel -= 1; + EditorGUILayout.Space(); + } + + void DoOutlinePanels() + { + s_Outline = BeginPanel("Outline 1", s_Outline); + if (s_Outline) + DoOutlinePanelWithTexture(1, "Y", "Color"); + + EndPanel(); + + s_Outline2 = BeginPanel("Outline 2", s_Outline2); + if (s_Outline2) + DoOutlinePanel(2, "Z", "Color"); + + EndPanel(); + + s_Outline3 = BeginPanel("Outline 3", s_Outline3); + if (s_Outline3) + DoOutlinePanel(3, "W", "Color"); + + EndPanel(); + } + + void DoOutlinePanel(int outlineID, string propertyField, string label) + { + EditorGUI.indentLevel += 1; + DoColor("_OutlineColor" + outlineID, label); + + if (outlineID != 3) + DoOffset("_OutlineOffset" + outlineID, "Offset"); + else + { + if (m_Material.GetFloat(ShaderUtilities.ID_OutlineMode) == 0) + DoOffset("_OutlineOffset" + outlineID, "Offset"); + } + + DoSlider("_Softness", propertyField, new Vector2(0, 1), "Softness"); + DoSlider("_IsoPerimeter", propertyField, new Vector2(-1, 1), "Dilate"); + + if (outlineID == 3) + { + DoToggle("_OutlineMode", "Outline Mode"); + } + + if (m_Material.HasProperty("_OutlineShininess")) + { + //DoSlider("_OutlineShininess", "Gloss"); + } + + EditorGUI.indentLevel -= 1; + EditorGUILayout.Space(); + } + + void DoOutlinePanelWithTexture(int outlineID, string propertyField, string label) + { + EditorGUI.indentLevel += 1; + DoColor("_OutlineColor" + outlineID, label); + if (m_Material.HasProperty(ShaderUtilities.ID_OutlineTex)) + { + if (m_Material.HasProperty("_OutlineUVSpeedX")) + { + DoTexture2D("_OutlineTex", "Texture", true, s_OutlineUvSpeedNames); + } + else if (m_Material.HasProperty("_OutlineUVSpeed")) + { + DoTexture2D("_OutlineTex", "Texture", true, s_OutlineUvSpeedName); + } + else + { + DoTexture2D("_OutlineTex", "Texture", true); + } + } + + DoOffset("_OutlineOffset" + outlineID, "Offset"); + DoSlider("_Softness", propertyField, new Vector2(0, 1), "Softness"); + DoSlider("_IsoPerimeter", propertyField, new Vector2(-1, 1), "Dilate"); + + if (m_Material.HasProperty("_OutlineShininess")) + { + //DoSlider("_OutlineShininess", "Gloss"); + } + + EditorGUI.indentLevel -= 1; + EditorGUILayout.Space(); + } + + void DoUnderlayPanel() + { + EditorGUI.indentLevel += 1; + + if (m_Material.HasProperty(ShaderUtilities.ID_IsoPerimeter)) + { + DoColor("_UnderlayColor", "Color"); + DoSlider("_UnderlayOffset", "X", new Vector2(-1, 1), "Offset X"); + DoSlider("_UnderlayOffset", "Y", new Vector2(-1, 1), "Offset Y"); + DoSlider("_UnderlayDilate", new Vector2(-1, 1), "Dilate"); + DoSlider("_UnderlaySoftness", new Vector2(0, 1), "Softness"); + } + else + { + 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 DrawLightingPanel() + { + s_Lighting = BeginPanel("Lighting", 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(); + } + + void DoBevelPanel() + { + EditorGUI.indentLevel += 1; + DoPopup("_BevelType", "Type", s_BevelTypeLabels); + DoSlider("_BevelAmount", "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"); + } + } + + if (m_Material.HasProperty(ShaderUtilities.ShaderTag_CullMode)) + { + EditorGUILayout.Space(); + DoPopup("_CullMode", "Cull Mode", s_CullingTypeLabels); + } + + EditorGUILayout.Space(); + + 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 DoDebugPanelSRP() + { + 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"); + } + } + */ + if (m_Material.HasProperty(ShaderUtilities.ShaderTag_CullMode)) + { + EditorGUILayout.Space(); + DoPopup("_CullMode", "Cull Mode", s_CullingTypeLabels); + } + + EditorGUILayout.Space(); + /* + 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(); + 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); + } + + // protected override void SetupMaterialKeywordsAndPassInternal(Material material) + // { + // BaseLitGUI.SetupBaseLitKeywords(material); + // BaseLitGUI.SetupBaseLitMaterialPass(material); + // } + } +} +#endif diff --git a/Assets/TextMesh Pro/Scripts/Editor/HDRP/TMP_SDF_HDRPUnlitShaderGUI.cs.meta b/Assets/TextMesh Pro/Scripts/Editor/HDRP/TMP_SDF_HDRPUnlitShaderGUI.cs.meta new file mode 100644 index 0000000..f140640 --- /dev/null +++ b/Assets/TextMesh Pro/Scripts/Editor/HDRP/TMP_SDF_HDRPUnlitShaderGUI.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: bad96c2cfa78a124cb8ec890d2386dfe +timeCreated: 1469844718 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TextMesh Pro/Scripts/Editor/PropertyDrawers.meta b/Assets/TextMesh Pro/Scripts/Editor/PropertyDrawers.meta new file mode 100644 index 0000000..13f652d --- /dev/null +++ b/Assets/TextMesh Pro/Scripts/Editor/PropertyDrawers.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ea7c31b5b377c314db28ad3fabbbd38d +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TextMesh Pro/Scripts/Editor/PropertyDrawers/DropdownOptionListDrawer.cs b/Assets/TextMesh Pro/Scripts/Editor/PropertyDrawers/DropdownOptionListDrawer.cs new file mode 100644 index 0000000..861db9d --- /dev/null +++ b/Assets/TextMesh Pro/Scripts/Editor/PropertyDrawers/DropdownOptionListDrawer.cs @@ -0,0 +1,63 @@ +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 += 40; + } + + 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"); + SerializedProperty itemColor = itemData.FindPropertyRelative("m_Color"); + + 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 + 2; + EditorGUI.PropertyField(rect, itemImage, GUIContent.none); + rect.y += EditorGUIUtility.singleLineHeight + 2; + EditorGUI.PropertyField(rect, itemColor, GUIContent.none); + } + + public override float GetPropertyHeight(SerializedProperty property, GUIContent label) + { + Init(property); + + return m_ReorderableList.GetHeight(); + } + } +} diff --git a/Assets/TextMesh Pro/Scripts/Editor/PropertyDrawers/DropdownOptionListDrawer.cs.meta b/Assets/TextMesh Pro/Scripts/Editor/PropertyDrawers/DropdownOptionListDrawer.cs.meta new file mode 100644 index 0000000..9d0c86c --- /dev/null +++ b/Assets/TextMesh Pro/Scripts/Editor/PropertyDrawers/DropdownOptionListDrawer.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 705d3db7bce31a7439cc4c95cde5b04f +timeCreated: 1464818008 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TextMesh Pro/Scripts/Editor/PropertyDrawers/TMP_TextAlignmentDrawer.cs b/Assets/TextMesh Pro/Scripts/Editor/PropertyDrawers/TMP_TextAlignmentDrawer.cs new file mode 100644 index 0000000..2d76f22 --- /dev/null +++ b/Assets/TextMesh Pro/Scripts/Editor/PropertyDrawers/TMP_TextAlignmentDrawer.cs @@ -0,0 +1,273 @@ +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; + } + } + + [CustomPropertyDrawer(typeof(HorizontalAlignmentOptions))] + public class TMP_HorizontalAlignmentDrawer : 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); + + if (EditorGUI.EndChangeCheck()) + { + var value = 0x1 << selectedHorizontal; + 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.horizontalAlignment)] = 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; + } + } + + + [CustomPropertyDrawer(typeof(VerticalAlignmentOptions))] + public class TMP_VerticalAlignmentDrawer : 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 = 0x100 << selectedVertical; + property.intValue = value; + } + } + EditorGUI.EndProperty(); + } + + 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.verticalAlignment)] = 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/Assets/TextMesh Pro/Scripts/Editor/PropertyDrawers/TMP_TextAlignmentDrawer.cs.meta b/Assets/TextMesh Pro/Scripts/Editor/PropertyDrawers/TMP_TextAlignmentDrawer.cs.meta new file mode 100644 index 0000000..a37191b --- /dev/null +++ b/Assets/TextMesh Pro/Scripts/Editor/PropertyDrawers/TMP_TextAlignmentDrawer.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: ea87c857d2c45f64ebe967330244a515 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TextMesh Pro/Scripts/Editor/TMP_BaseEditorPanel.cs b/Assets/TextMesh Pro/Scripts/Editor/TMP_BaseEditorPanel.cs new file mode 100644 index 0000000..4f3e646 --- /dev/null +++ b/Assets/TextMesh Pro/Scripts/Editor/TMP_BaseEditorPanel.cs @@ -0,0 +1,1390 @@ +using System.Collections.Generic; +using System.Linq; +using UnityEngine; +using UnityEngine.TextCore.Text; +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_StyleLabel = new GUIContent("Text Style", "The style from a style sheet to be applied to the text."); + 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 tag."); + + static readonly GUIContent k_SpacingOptionsLabel = new GUIContent("Spacing Options (em)", "Spacing adjustments between different elements of the text. Values are in font units where a value of 1 equals 1/100em."); + 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 alignment 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_IsTextObjectScaleStatic = new GUIContent("Is Scale Static", "Controls whether a text object will be excluded from the InteralUpdate callback to handle scale changes of the text object or its parent(s)."); + static readonly GUIContent k_RichTextLabel = new GUIContent("Rich Text", "Enables the use of rich text tags such as and ."); + 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 ."); + static readonly GUIContent k_StyleSheetAssetLabel = new GUIContent("Style Sheet Asset", "The Style Sheet Asset used by this text object."); + + 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 static string[] k_UiStateLabel = new string[] { "(Click to collapse) ", "(Click to expand) " }; + + static Dictionary k_AvailableStyles = new Dictionary(); + protected Dictionary m_TextStyleIndexLookup = new Dictionary(); + + 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 Dictionary m_MaterialPresetIndexLookup = new Dictionary(); + protected int m_MaterialPresetSelectionIndex; + protected bool m_IsPresetListDirty; + + protected List m_Styles = new List(); + protected GUIContent[] m_StyleNames; + protected int m_StyleSelectionIndex; + + 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_HorizontalAlignmentProp; + protected SerializedProperty m_VerticalAlignmentProp; + + protected SerializedProperty m_HorizontalMappingProp; + protected SerializedProperty m_VerticalMappingProp; + protected SerializedProperty m_UvLineOffsetProp; + + protected SerializedProperty m_TextWrappingModeProp; + protected SerializedProperty m_WordWrappingRatiosProp; + protected SerializedProperty m_TextOverflowModeProp; + protected SerializedProperty m_PageToDisplayProp; + protected SerializedProperty m_LinkedTextComponentProp; + protected SerializedProperty m_ParentLinkedTextComponentProp; + + 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_IsTextObjectScaleStaticProp; + + protected SerializedProperty m_SpriteAssetProp; + + protected SerializedProperty m_StyleSheetAssetProp; + protected SerializedProperty m_TextStyleHashCodeProp; + + protected SerializedProperty m_MarginProp; + + protected SerializedProperty m_ColorModeProp; + + protected bool m_HavePropertiesChanged; + + protected TMP_Text m_TextComponent; + protected TMP_Text m_PreviousLinkedTextComponent; + 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_HorizontalAlignmentProp = serializedObject.FindProperty("m_HorizontalAlignment"); + m_VerticalAlignmentProp = serializedObject.FindProperty("m_VerticalAlignment"); + + m_HorizontalMappingProp = serializedObject.FindProperty("m_horizontalMapping"); + m_VerticalMappingProp = serializedObject.FindProperty("m_verticalMapping"); + m_UvLineOffsetProp = serializedObject.FindProperty("m_uvLineOffset"); + + m_TextWrappingModeProp = serializedObject.FindProperty("m_TextWrappingMode"); + 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_ParentLinkedTextComponentProp = serializedObject.FindProperty("parentLinkedComponent"); + + 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_IsTextObjectScaleStaticProp = serializedObject.FindProperty("m_IsTextObjectScaleStatic"); + + m_SpriteAssetProp = serializedObject.FindProperty("m_spriteAsset"); + + m_StyleSheetAssetProp = serializedObject.FindProperty("m_StyleSheet"); + m_TextStyleHashCodeProp = serializedObject.FindProperty("m_TextStyleHashCode"); + + 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; + + // Restore Previous Linked Text Component + m_PreviousLinkedTextComponent = m_TextComponent.linkedTextComponent; + + // 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(); + + // Get Styles from Style Sheet + if (TMP_Settings.instance != null) + m_StyleNames = GetStyleNames(); + + // Register to receive events when style sheets are modified. + TextEventManager.TEXT_STYLE_PROPERTY_EVENT.Add(ON_TEXT_STYLE_CHANGED); + + // 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; + + // Unregister from style sheet related events. + TextEventManager.TEXT_STYLE_PROPERTY_EVENT.Remove(ON_TEXT_STYLE_CHANGED); + } + + // Event received when Text Styles are changed. + void ON_TEXT_STYLE_CHANGED(bool isChanged) + { + m_StyleNames = GetStyleNames(); + } + + public override void OnInspectorGUI() + { + // Make sure Multi selection only includes TMP Text objects. + if (IsMixSelectionTypes()) return; + + serializedObject.Update(); + + DrawTextInput(); + + DrawMainSettings(); + + DrawExtraSettings(); + + EditorGUILayout.Space(); + + if (serializedObject.ApplyModifiedProperties() || m_HavePropertiesChanged) + { + m_TextComponent.havePropertiesChanged = true; + m_HavePropertiesChanged = false; + } + } + + 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)); + + Matrix4x4 matrix = m_RectTransform.worldToLocalMatrix; + + // Draw & process FreeMoveHandles + + // LEFT HANDLE + Vector3 oldLeft = (m_HandlePoints[0] + m_HandlePoints[1]) * 0.5f; + //#if UNITY_2022_1_OR_NEWER + //Vector3 newLeft = Handles.FreeMoveHandle(oldLeft, HandleUtility.GetHandleSize(m_RectTransform.position) * 0.05f, Vector3.zero, Handles.DotHandleCap); + //#else + Vector3 newLeft = Handles.FreeMoveHandle(oldLeft, Quaternion.identity, HandleUtility.GetHandleSize(m_RectTransform.position) * 0.05f, Vector3.zero, Handles.DotHandleCap); + //#endif + bool hasChanged = false; + if (oldLeft != newLeft) + { + oldLeft = matrix.MultiplyPoint(oldLeft); + newLeft = matrix.MultiplyPoint(newLeft); + + float delta = (oldLeft.x - newLeft.x) * lossyScale.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; + //#if UNITY_2022_1_OR_NEWER + //Vector3 newTop = Handles.FreeMoveHandle(oldTop, HandleUtility.GetHandleSize(m_RectTransform.position) * 0.05f, Vector3.zero, Handles.DotHandleCap); + //#else + Vector3 newTop = Handles.FreeMoveHandle(oldTop, Quaternion.identity, HandleUtility.GetHandleSize(m_RectTransform.position) * 0.05f, Vector3.zero, Handles.DotHandleCap); + //#endif + if (oldTop != newTop) + { + oldTop = matrix.MultiplyPoint(oldTop); + newTop = matrix.MultiplyPoint(newTop); + + float delta = (oldTop.y - newTop.y) * lossyScale.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; + //#if UNITY_2022_1_OR_NEWER + //Vector3 newRight = Handles.FreeMoveHandle(oldRight, HandleUtility.GetHandleSize(m_RectTransform.position) * 0.05f, Vector3.zero, Handles.DotHandleCap); + //#else + Vector3 newRight = Handles.FreeMoveHandle(oldRight, Quaternion.identity, HandleUtility.GetHandleSize(m_RectTransform.position) * 0.05f, Vector3.zero, Handles.DotHandleCap); + //#endif + if (oldRight != newRight) + { + oldRight = matrix.MultiplyPoint(oldRight); + newRight = matrix.MultiplyPoint(newRight); + + float delta = (oldRight.x - newRight.x) * lossyScale.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; + //#if UNITY_2022_1_OR_NEWER + //Vector3 newBottom = Handles.FreeMoveHandle(oldBottom, HandleUtility.GetHandleSize(m_RectTransform.position) * 0.05f, Vector3.zero, Handles.DotHandleCap); + //#else + Vector3 newBottom = Handles.FreeMoveHandle(oldBottom, Quaternion.identity, HandleUtility.GetHandleSize(m_RectTransform.position) * 0.05f, Vector3.zero, Handles.DotHandleCap); + //#endif + if (oldBottom != newBottom) + { + oldBottom = matrix.MultiplyPoint(oldBottom); + newBottom = matrix.MultiplyPoint(newBottom); + + float delta = (oldBottom.y - newBottom.y) * lossyScale.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(); + + Rect rect = EditorGUILayout.GetControlRect(false, 22); + GUI.Label(rect, new GUIContent("Text Input"), TMP_UIStyleManager.sectionHeader); + + EditorGUI.indentLevel = 0; + + // If the text component is linked, disable the text input box. + if (m_ParentLinkedTextComponentProp.objectReferenceValue != null) + { + EditorGUILayout.HelpBox("The Text Input Box is disabled due to this text component being linked to another.", MessageType.Info); + } + else + { + // Display RTL Toggle + float labelWidth = EditorGUIUtility.labelWidth; + EditorGUIUtility.labelWidth = 110f; + + m_IsRightToLeftProp.boolValue = EditorGUI.Toggle(new Rect(rect.width - 120, rect.y + 3, 130, 20), k_RtlToggleLabel, m_IsRightToLeftProp.boolValue); + + EditorGUIUtility.labelWidth = labelWidth; + + EditorGUI.BeginChangeCheck(); + EditorGUILayout.PropertyField(m_TextProp, GUIContent.none); + + // Need to also compare string content due to issue related to scroll bar drag handle + if (EditorGUI.EndChangeCheck() && m_TextProp.stringValue != m_TextComponent.text) + { + m_TextComponent.m_inputSource = TMP_Text.TextInputSources.TextInputBox; + m_HavePropertiesChanged = true; + } + + if (m_IsRightToLeftProp.boolValue) + { + // Copy source text to RTL string + 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]; + + GUILayout.Label("RTL Text Input"); + + 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 + 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; + } + } + + // TEXT STYLE + if (m_StyleNames != null) + { + rect = EditorGUILayout.GetControlRect(false, 17); + + EditorGUI.BeginProperty(rect, k_StyleLabel, m_TextStyleHashCodeProp); + + m_TextStyleIndexLookup.TryGetValue(m_TextStyleHashCodeProp.intValue, out m_StyleSelectionIndex); + + EditorGUI.BeginChangeCheck(); + m_StyleSelectionIndex = EditorGUI.Popup(rect, k_StyleLabel, m_StyleSelectionIndex, m_StyleNames); + if (EditorGUI.EndChangeCheck()) + { + m_TextStyleHashCodeProp.intValue = m_Styles[m_StyleSelectionIndex].hashCode; + m_TextComponent.m_TextStyle = m_Styles[m_StyleSelectionIndex]; + m_HavePropertiesChanged = true; + } + + EditorGUI.EndProperty(); + } + } + } + + protected void DrawMainSettings() + { + // MAIN SETTINGS SECTION + GUILayout.Label(new GUIContent("Main Settings"), TMP_UIStyleManager.sectionHeader); + + //EditorGUI.indentLevel += 1; + + DrawFont(); + + DrawColor(); + + DrawSpacing(); + + DrawAlignment(); + + DrawWrappingOverflow(); + + DrawTextureMapping(); + + //EditorGUI.indentLevel -= 1; + } + + void DrawFont() + { + bool isFontAssetDirty = false; + + // FONT ASSET + EditorGUI.BeginChangeCheck(); + EditorGUILayout.PropertyField(m_FontAssetProp, k_FontAssetLabel); + if (EditorGUI.EndChangeCheck()) + { + m_HavePropertiesChanged = true; + m_HasFontAssetChangedProp.boolValue = true; + + // Get new Material Presets for the new font asset + m_MaterialPresetNames = GetMaterialPresets(); + m_MaterialPresetSelectionIndex = 0; + + isFontAssetDirty = true; + } + + Rect rect; + + // MATERIAL PRESET + if (m_MaterialPresetNames != null && !isFontAssetDirty ) + { + EditorGUI.BeginChangeCheck(); + rect = EditorGUILayout.GetControlRect(false, 17); + + EditorGUI.BeginProperty(rect, k_MaterialPresetLabel, m_FontSharedMaterialProp); + + float oldHeight = EditorStyles.popup.fixedHeight; + EditorStyles.popup.fixedHeight = rect.height; + + int oldSize = EditorStyles.popup.fontSize; + EditorStyles.popup.fontSize = 11; + + if (m_FontSharedMaterialProp.objectReferenceValue != null) + m_MaterialPresetIndexLookup.TryGetValue(m_FontSharedMaterialProp.objectReferenceValue.GetInstanceID(), out m_MaterialPresetSelectionIndex); + + m_MaterialPresetSelectionIndex = EditorGUI.Popup(rect, k_MaterialPresetLabel, m_MaterialPresetSelectionIndex, m_MaterialPresetNames); + + EditorGUI.EndProperty(); + + if (EditorGUI.EndChangeCheck()) + { + m_FontSharedMaterialProp.objectReferenceValue = m_MaterialPresets[m_MaterialPresetSelectionIndex]; + m_HavePropertiesChanged = 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.BeginProperty(rect, k_FontStyleLabel, m_FontStyleProp); + + 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; + } + + EditorGUI.EndProperty(); + } + else + { + rect = EditorGUILayout.GetControlRect(true, EditorGUIUtility.singleLineHeight + 2f); + + EditorGUI.BeginProperty(rect, k_FontStyleLabel, m_FontStyleProp); + + 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; + } + + EditorGUI.EndProperty(); + } + + 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()) + { + float fontSize = Mathf.Clamp(m_FontSizeProp.floatValue, 0, 32767); + + m_FontSizeProp.floatValue = fontSize; + m_FontSizeBaseProp.floatValue = fontSize; + 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()) + { + float minSize = m_FontSizeMinProp.floatValue; + + minSize = Mathf.Max(0, minSize); + + m_FontSizeMinProp.floatValue = Mathf.Min(minSize, 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()) + { + float maxSize = Mathf.Clamp(m_FontSizeMaxProp.floatValue, 0, 32767); + + m_FontSizeMaxProp.floatValue = Mathf.Max(m_FontSizeMinProp.floatValue, maxSize); + 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); + if (EditorGUI.EndChangeCheck()) + { + m_HavePropertiesChanged = true; + } + + EditorGUI.BeginChangeCheck(); + 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); + + Rect 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 ((ColorGradientMode)colorMode.enumValueIndex) + { + case ColorGradientMode.Single: + TMP_EditorUtility.DrawColorProperty(rect, topLeft); + + topRight.colorValue = topLeft.colorValue; + bottomLeft.colorValue = topLeft.colorValue; + bottomRight.colorValue = topLeft.colorValue; + break; + case ColorGradientMode.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 ColorGradientMode.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 ColorGradientMode.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(); + TextEventManager.ON_COLOR_GRADIENT_PROPERTY_CHANGED(m_FontColorGradientPresetProp.objectReferenceValue as TextColorGradient); + } + } + + 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; + + float currentLabelWidth = EditorGUIUtility.labelWidth; + rect.x += currentLabelWidth; + rect.width = (rect.width - currentLabelWidth - 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); + + rect.x += currentLabelWidth; + rect.width = (rect.width - currentLabelWidth -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 = currentLabelWidth; + EditorGUI.indentLevel = oldIndent; + + if (EditorGUI.EndChangeCheck()) + { + m_HavePropertiesChanged = true; + } + + EditorGUILayout.Space(); + } + + void DrawAlignment() + { + // TEXT ALIGNMENT + EditorGUI.BeginChangeCheck(); + + Rect rect = EditorGUILayout.GetControlRect(true, EditorGUIUtility.currentViewWidth > 504 ? 20 : 40 + 3); + EditorGUI.BeginProperty(rect, k_AlignmentLabel, m_HorizontalAlignmentProp); + EditorGUI.BeginProperty(rect, k_AlignmentLabel, m_VerticalAlignmentProp); + + EditorGUI.PrefixLabel(rect, k_AlignmentLabel); + rect.x += EditorGUIUtility.labelWidth; + + EditorGUI.PropertyField(rect, m_HorizontalAlignmentProp, GUIContent.none); + EditorGUI.PropertyField(rect, m_VerticalAlignmentProp, GUIContent.none); + + // WRAPPING RATIOS shown if Justified mode is selected. + if (((HorizontalAlignmentOptions)m_HorizontalAlignmentProp.intValue & HorizontalAlignmentOptions.Justified) == HorizontalAlignmentOptions.Justified || ((HorizontalAlignmentOptions)m_HorizontalAlignmentProp.intValue & HorizontalAlignmentOptions.Flush) == HorizontalAlignmentOptions.Flush) + DrawPropertySlider(k_WrapMixLabel, m_WordWrappingRatiosProp); + + if (EditorGUI.EndChangeCheck()) + m_HavePropertiesChanged = true; + + EditorGUI.EndProperty(); + EditorGUI.EndProperty(); + + EditorGUILayout.Space(); + } + + void DrawWrappingOverflow() + { + // TEXT WRAPPING + Rect rect = EditorGUILayout.GetControlRect(true, EditorGUIUtility.singleLineHeight); + EditorGUI.BeginProperty(rect, k_WrappingLabel, m_TextWrappingModeProp); + + EditorGUI.BeginChangeCheck(); + EditorGUI.PropertyField(rect, m_TextWrappingModeProp); + if (EditorGUI.EndChangeCheck()) + { + m_HavePropertiesChanged = true; + } + + EditorGUI.EndProperty(); + + // TEXT OVERFLOW + EditorGUI.BeginChangeCheck(); + + if ((TextOverflowModes)m_TextOverflowModeProp.enumValueIndex == TextOverflowModes.Linked) + { + EditorGUILayout.BeginHorizontal(); + + float fieldWidth = EditorGUIUtility.fieldWidth; + EditorGUIUtility.fieldWidth = 65; + EditorGUILayout.PropertyField(m_TextOverflowModeProp, k_OverflowLabel); + EditorGUIUtility.fieldWidth = fieldWidth; + + EditorGUILayout.PropertyField(m_LinkedTextComponentProp, GUIContent.none); + + EditorGUILayout.EndHorizontal(); + + if (GUI.changed) + { + TMP_Text linkedComponent = m_LinkedTextComponentProp.objectReferenceValue as TMP_Text; + + if (linkedComponent == null) + { + m_LinkedTextComponentProp.objectReferenceValue = null; + + if (m_PreviousLinkedTextComponent != null) + m_TextComponent.ReleaseLinkedTextComponent(m_PreviousLinkedTextComponent); + } + else if (m_TextComponent.IsSelfOrLinkedAncestor(linkedComponent)) + { + m_LinkedTextComponentProp.objectReferenceValue = m_PreviousLinkedTextComponent; + } + else + { + if (m_PreviousLinkedTextComponent != null) + m_TextComponent.ReleaseLinkedTextComponent(m_PreviousLinkedTextComponent); + + m_LinkedTextComponentProp.objectReferenceValue = linkedComponent; + linkedComponent.parentLinkedComponent = m_TextComponent; + m_PreviousLinkedTextComponent = 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 (m_PreviousLinkedTextComponent) + { + m_TextComponent.ReleaseLinkedTextComponent(m_PreviousLinkedTextComponent); + + m_TextComponent.linkedTextComponent = null; + } + } + else + { + EditorGUILayout.PropertyField(m_TextOverflowModeProp, k_OverflowLabel); + + if (m_PreviousLinkedTextComponent) + { + m_TextComponent.ReleaseLinkedTextComponent(m_PreviousLinkedTextComponent); + + m_TextComponent.linkedTextComponent = null; + } + } + + if (EditorGUI.EndChangeCheck()) + { + m_HavePropertiesChanged = 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 DrawIsTextObjectScaleStatic() + { + EditorGUI.BeginChangeCheck(); + + EditorGUILayout.PropertyField(m_IsTextObjectScaleStaticProp, k_IsTextObjectScaleStatic); + + if (EditorGUI.EndChangeCheck()) + { + m_TextComponent.isTextObjectScaleStatic = m_IsTextObjectScaleStaticProp.boolValue; + 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); + + if (EditorGUI.EndChangeCheck()) + m_HavePropertiesChanged = true; + + EditorGUILayout.Space(); + } + + protected void DrawSpriteAsset() + { + EditorGUI.BeginChangeCheck(); + + EditorGUILayout.PropertyField(m_SpriteAssetProp, k_SpriteAssetLabel, true); + + if (EditorGUI.EndChangeCheck()) + m_HavePropertiesChanged = true; + + EditorGUILayout.Space(); + } + + protected void DrawStyleSheet() + { + EditorGUI.BeginChangeCheck(); + + EditorGUILayout.PropertyField(m_StyleSheetAssetProp, k_StyleSheetAssetLabel, true); + + if (EditorGUI.EndChangeCheck()) + { + m_StyleNames = GetStyleNames(); + 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; + } + } + + /// + /// Method to retrieve the material presets that match the currently selected font asset. + /// + protected GUIContent[] GetMaterialPresets() + { + FontAsset fontAsset = m_FontAssetProp.objectReferenceValue as FontAsset; + if (fontAsset == null) return null; + + m_MaterialPresets = TMP_EditorUtility.FindMaterialReferences(fontAsset); + m_MaterialPresetNames = new GUIContent[m_MaterialPresets.Length]; + + m_MaterialPresetIndexLookup.Clear(); + + for (int i = 0; i < m_MaterialPresetNames.Length; i++) + { + m_MaterialPresetNames[i] = new GUIContent(m_MaterialPresets[i].name); + + m_MaterialPresetIndexLookup.Add(m_MaterialPresets[i].GetInstanceID(), i); + + //if (m_TargetMaterial.GetInstanceID() == m_MaterialPresets[i].GetInstanceID()) + // m_MaterialPresetSelectionIndex = i; + } + + m_IsPresetListDirty = false; + + return m_MaterialPresetNames; + } + + protected GUIContent[] GetStyleNames() + { + k_AvailableStyles.Clear(); + m_TextStyleIndexLookup.Clear(); + m_Styles.Clear(); + + // First style on the list is always the Normal default style. + TextStyle styleNormal = TextStyle.NormalStyle; + + m_Styles.Add(styleNormal); + m_TextStyleIndexLookup.Add(styleNormal.hashCode, 0); + + k_AvailableStyles.Add(styleNormal.hashCode, styleNormal); + + // Get styles from Style Sheet potentially assigned to the text object. + TextStyleSheet localStyleSheet = (TextStyleSheet)m_StyleSheetAssetProp.objectReferenceValue; + + if (localStyleSheet != null) + { + int styleCount = localStyleSheet.styles.Count; + + for (int i = 0; i < styleCount; i++) + { + TextStyle style = localStyleSheet.styles[i]; + + if (k_AvailableStyles.ContainsKey(style.hashCode) == false) + { + k_AvailableStyles.Add(style.hashCode, style); + m_Styles.Add(style); + m_TextStyleIndexLookup.Add(style.hashCode, m_TextStyleIndexLookup.Count); + } + } + } + + // Get styles from TMP Settings' default style sheet. + TextStyleSheet globalStyleSheet = TMP_Settings.defaultStyleSheet; + + if (globalStyleSheet != null) + { + int styleCount = globalStyleSheet.styles.Count; + + for (int i = 0; i < styleCount; i++) + { + TextStyle style = globalStyleSheet.styles[i]; + + if (k_AvailableStyles.ContainsKey(style.hashCode) == false) + { + k_AvailableStyles.Add(style.hashCode, style); + m_Styles.Add(style); + m_TextStyleIndexLookup.Add(style.hashCode, m_TextStyleIndexLookup.Count); + } + } + } + + // Create array that will contain the list of available styles. + GUIContent[] styleNames = k_AvailableStyles.Values.Select(item => new GUIContent(item.name)).ToArray(); + + // Set text style index + m_TextStyleIndexLookup.TryGetValue(m_TextStyleHashCodeProp.intValue, out m_StyleSelectionIndex); + + return styleNames; + } + + // 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, rect.y + 2, rect.width - 15, 18); + + float width = rect.width + 3; + pos0.width = EditorGUIUtility.labelWidth; + EditorGUI.PrefixLabel(pos0, label); + + Vector4 margins = property.vector4Value; + + float widthB = width - EditorGUIUtility.labelWidth; + float fieldWidth = widthB / 4; + pos0.width = Mathf.Max(fieldWidth - 5, 45f); + + // Labels + pos0.x = EditorGUIUtility.labelWidth + 15; + margins.x = DrawMarginField(pos0, "Left", margins.x); + + pos0.x += fieldWidth; + margins.y = DrawMarginField(pos0, "Top", margins.y); + + pos0.x += fieldWidth; + margins.z = DrawMarginField(pos0, "Right", margins.z); + + pos0.x += fieldWidth; + margins.w = DrawMarginField(pos0, "Bottom", margins.w); + + property.vector4Value = margins; + + EditorGUI.EndProperty(); + } + + float DrawMarginField(Rect position, string label, float value) + { + int controlId = GUIUtility.GetControlID(FocusType.Keyboard, position); + EditorGUI.PrefixLabel(position, controlId, new GUIContent(label)); + + Rect dragZone = new Rect(position.x, position.y, position.width, position.height); + position.y += EditorGUIUtility.singleLineHeight; + + return EditorGUI.DoFloatField(EditorGUI.s_RecycledEditor, position, dragZone, controlId, value, EditorGUI.kFloatFieldFormatString, EditorStyles.numberField, true); + } + + 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(); + + } +} diff --git a/Assets/TextMesh Pro/Scripts/Editor/TMP_BaseEditorPanel.cs.meta b/Assets/TextMesh Pro/Scripts/Editor/TMP_BaseEditorPanel.cs.meta new file mode 100644 index 0000000..466b11e --- /dev/null +++ b/Assets/TextMesh Pro/Scripts/Editor/TMP_BaseEditorPanel.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 53dc282e104b7b3499778bb50cb28216 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TextMesh Pro/Scripts/Editor/TMP_BaseShaderGUI.cs b/Assets/TextMesh Pro/Scripts/Editor/TMP_BaseShaderGUI.cs new file mode 100644 index 0000000..9d91cc5 --- /dev/null +++ b/Assets/TextMesh Pro/Scripts/Editor/TMP_BaseShaderGUI.cs @@ -0,0 +1,699 @@ +using UnityEngine; +using UnityEngine.TextCore.Text; +using UnityEditor; + + +namespace TMPro.EditorUtilities +{ + /// Base class for TextMesh Pro shader GUIs. + public abstract class TMP_BaseShaderGUI : ShaderGUI + { + /// Representation of a #pragma shader_feature. + /// It is assumed that the first feature option is for no keyword (underscores). + protected class ShaderFeature + { + public string undoLabel; + + public GUIContent label; + + /// The keyword labels, for display. Include the no-keyword as the first option. + public GUIContent[] keywordLabels; + + /// The shader keywords. Exclude the no-keyword option. + 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") + }; + + protected static GUIContent[] s_CullingTypeLabels = + { + new GUIContent("Off"), + new GUIContent("Front"), + new GUIContent("Back") + }; + + 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; + private int m_ShaderID; + + 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. + TextEventManager.ON_MATERIAL_PROPERTY_CHANGED(true, m_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()) + { + TextEventManager.ON_MATERIAL_PROPERTY_CHANGED(true, m_Material); + } + + DoDragAndDropEnd(); + } + + public override void AssignNewShaderToMaterial(Material material, Shader oldShader, Shader newShader) + { + base.AssignNewShaderToMaterial(material, oldShader, newShader); + + TextEventManager.ON_MATERIAL_PROPERTY_CHANGED(true, material); + } + + /// Override this method to create the specific shader GUI. + protected abstract void DoGUI(); + + static string[] s_PanelStateLabel = new string[] { "\t- Click to collapse -", "\t- Click to expand -" }; + + protected bool BeginPanel(string panel, bool expanded) + { + EditorGUI.indentLevel = 0; + + 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) + { + EditorGUI.indentLevel = 0; + + 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) + { + float objFieldSize = 60f; + bool smallLayout = EditorGUIUtility.currentViewWidth <= 330f && (withTilingOffset || speedNames != null); + float controlHeight = smallLayout ? objFieldSize * 2 : objFieldSize; + + MaterialProperty property = FindProperty(name, m_Properties); + m_Editor.BeginAnimatedCheck(Rect.zero, property); + + Rect rect = EditorGUILayout.GetControlRect(true, controlHeight); + float totalWidth = rect.width; + rect.width = EditorGUIUtility.labelWidth + objFieldSize; + rect.height = objFieldSize; + s_TempLabel.text = label; + + EditorGUI.BeginChangeCheck(); + Object tex = EditorGUI.ObjectField(rect, s_TempLabel, property.textureValue, type, false); + if (EditorGUI.EndChangeCheck()) + { + property.textureValue = tex as Texture; + } + + float additionalHeight = controlHeight - objFieldSize; + float xOffset = smallLayout ? rect.width - objFieldSize : rect.width; + + rect.y += additionalHeight; + rect.x += xOffset; + rect.width = totalWidth - xOffset; + rect.height = EditorGUIUtility.singleLineHeight; + + if (withTilingOffset) + { + DoTilingOffset(rect, property); + rect.y += (rect.height + 2f) * 2f; + } + + m_Editor.EndAnimatedCheck(); + + 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.40f); + + 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 (EditorGUI.EndChangeCheck()) + { + 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 (EditorGUI.EndChangeCheck()) + { + 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.40f); + + s_TempLabel.text = "Speed"; + rect = EditorGUI.PrefixLabel(rect, s_TempLabel); + + EditorGUIUtility.labelWidth = 10f; + rect.width = rect.width * 0.5f - 2f; + + if (names.Length == 1) + { + DoFloat2(rect, names[0]); + } + else + { + DoFloat(rect, names[0], "X"); + rect.x += rect.width + 4f; + 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, false, true, true); + 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; + } + } + + void DoFloat2(Rect rect, string name) + { + MaterialProperty property = BeginProperty(name); + + float x = EditorGUI.FloatField(rect, "X", property.vectorValue.x); + rect.x += rect.width + 4f; + float y = EditorGUI.FloatField(rect, "Y", property.vectorValue.y); + + if (EndProperty()) + { + property.vectorValue = new Vector2(x, y); + } + } + + protected void DoOffset(string name, string label) + { + MaterialProperty property = BeginProperty(name); + s_TempLabel.text = label; + Vector2 value = EditorGUI.Vector2Field(EditorGUILayout.GetControlRect(), s_TempLabel, property.vectorValue); + if (EndProperty()) + { + property.vectorValue = 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 DoSlider(string name, Vector2 range, string label) + { + MaterialProperty property = BeginProperty(name); + 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 DoSlider(string propertyName, string propertyField, string label) + { + MaterialProperty property = BeginProperty(propertyName); + Vector2 range = property.rangeLimits; + s_TempLabel.text = label; + + Vector4 value = property.vectorValue; + + switch (propertyField) + { + case "X": + value.x = EditorGUI.Slider(EditorGUILayout.GetControlRect(), s_TempLabel, value.x, range.x, range.y); + break; + case "Y": + value.y = EditorGUI.Slider(EditorGUILayout.GetControlRect(), s_TempLabel, value.y, range.x, range.y); + break; + case "Z": + value.z = EditorGUI.Slider(EditorGUILayout.GetControlRect(), s_TempLabel, value.z, range.x, range.y); + break; + case "W": + value.w = EditorGUI.Slider(EditorGUILayout.GetControlRect(), s_TempLabel, value.w, range.x, range.y); + break; + } + + if (EndProperty()) + { + property.vectorValue = value; + } + } + + protected void DoSlider(string propertyName, string propertyField, Vector2 range, string label) + { + MaterialProperty property = BeginProperty(propertyName); + s_TempLabel.text = label; + + Vector4 value = property.vectorValue; + + switch (propertyField) + { + case "X": + value.x = EditorGUI.Slider(EditorGUILayout.GetControlRect(), s_TempLabel, value.x, range.x, range.y); + break; + case "Y": + value.y = EditorGUI.Slider(EditorGUILayout.GetControlRect(), s_TempLabel, value.y, range.x, range.y); + break; + case "Z": + value.z = EditorGUI.Slider(EditorGUILayout.GetControlRect(), s_TempLabel, value.z, range.x, range.y); + break; + case "W": + value.w = EditorGUI.Slider(EditorGUILayout.GetControlRect(), s_TempLabel, value.w, range.x, range.y); + break; + } + + if (EndProperty()) + { + property.vectorValue = value; + } + } + + protected void DoVector2(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 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; + } + } + + bool IsNewShader() + { + if (m_Material == null) + return false; + + int currentShaderID = m_Material.shader.GetInstanceID(); + + if (m_ShaderID == currentShaderID) + return false; + + m_ShaderID = currentShaderID; + + return true; + } + + 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); + } + } + else if (evt.type == EventType.DragExited) + { + if (IsNewShader()) + TextEventManager.ON_MATERIAL_PROPERTY_CHANGED(true, m_Material); + } + } + + void PerformDrop(Material droppedMaterial) + { + Texture droppedTex = droppedMaterial.GetTexture(ShaderUtilities.ID_MainTex); + if (!droppedTex) + { + return; + } + + Texture currentTex = m_Material.GetTexture(ShaderUtilities.ID_MainTex); + 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(); + if (textComponent) + { + Undo.RecordObject(textComponent, "Font Asset Change"); + textComponent.font = requiredFontAsset; + } + } + + TextEventManager.ON_DRAG_AND_DROP_MATERIAL_CHANGED(o, m_Material, droppedMaterial); + EditorUtility.SetDirty(o); + } + } + } +} diff --git a/Assets/TextMesh Pro/Scripts/Editor/TMP_BaseShaderGUI.cs.meta b/Assets/TextMesh Pro/Scripts/Editor/TMP_BaseShaderGUI.cs.meta new file mode 100644 index 0000000..4379064 --- /dev/null +++ b/Assets/TextMesh Pro/Scripts/Editor/TMP_BaseShaderGUI.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 5b568c26a0e77b24ea4badb24f550576 +timeCreated: 1469844810 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TextMesh Pro/Scripts/Editor/TMP_BitmapShaderGUI.cs b/Assets/TextMesh Pro/Scripts/Editor/TMP_BitmapShaderGUI.cs new file mode 100644 index 0000000..5463124 --- /dev/null +++ b/Assets/TextMesh Pro/Scripts/Editor/TMP_BitmapShaderGUI.cs @@ -0,0 +1,93 @@ +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"); + } + + if (m_Material.HasProperty(ShaderUtilities.ShaderTag_CullMode)) + { + EditorGUILayout.Space(); + DoPopup("_CullMode", "Cull Mode", s_CullingTypeLabels); + } + + EditorGUILayout.Space(); + + EditorGUI.indentLevel -= 1; + + EditorGUILayout.Space(); + } + } +} diff --git a/Assets/TextMesh Pro/Scripts/Editor/TMP_BitmapShaderGUI.cs.meta b/Assets/TextMesh Pro/Scripts/Editor/TMP_BitmapShaderGUI.cs.meta new file mode 100644 index 0000000..461fb64 --- /dev/null +++ b/Assets/TextMesh Pro/Scripts/Editor/TMP_BitmapShaderGUI.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: df3965f86289f794a967b4a8c6cfc6cb +timeCreated: 1469998850 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TextMesh Pro/Scripts/Editor/TMP_ColorGradientAssetMenu.cs b/Assets/TextMesh Pro/Scripts/Editor/TMP_ColorGradientAssetMenu.cs new file mode 100644 index 0000000..970b713 --- /dev/null +++ b/Assets/TextMesh Pro/Scripts/Editor/TMP_ColorGradientAssetMenu.cs @@ -0,0 +1,48 @@ +using System.IO; +using UnityEngine; +using UnityEngine.TextCore.Text; +using UnityEditor; + + +namespace TMPro.EditorUtilities +{ + public static class TMP_ColorGradientAssetMenu + { + [MenuItem("Assets/Create/TextMeshPro/Text Color Gradient", false, 250)] + internal static void CreateColorGradient(MenuCommand context) + { + string filePath; + + if (Selection.assetGUIDs.Length == 0) + filePath = "Assets/New Text Color Gradient.asset"; + else + filePath = AssetDatabase.GUIDToAssetPath(Selection.assetGUIDs[0]); + + if (Directory.Exists(filePath)) + { + filePath += "/New Text Color Gradient.asset"; + } + else + { + filePath = Path.GetDirectoryName(filePath) + "/New Text Color Gradient.asset"; + } + + filePath = AssetDatabase.GenerateUniqueAssetPath(filePath); + + // Create new Color Gradient Asset. + TextColorGradient colorGradient = ScriptableObject.CreateInstance(); + + // Create Asset + AssetDatabase.CreateAsset(colorGradient, filePath); + + //EditorUtility.SetDirty(colorGradient); + + AssetDatabase.SaveAssets(); + + AssetDatabase.ImportAsset(AssetDatabase.GetAssetPath(colorGradient)); + + EditorUtility.FocusProjectWindow(); + EditorGUIUtility.PingObject(colorGradient); + } + } +} diff --git a/Assets/TextMesh Pro/Scripts/Editor/TMP_ColorGradientAssetMenu.cs.meta b/Assets/TextMesh Pro/Scripts/Editor/TMP_ColorGradientAssetMenu.cs.meta new file mode 100644 index 0000000..e8073ed --- /dev/null +++ b/Assets/TextMesh Pro/Scripts/Editor/TMP_ColorGradientAssetMenu.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 7364ac159f2f5cc4dae5a5b262583afa +timeCreated: 1468187791 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TextMesh Pro/Scripts/Editor/TMP_DropdownEditor.cs b/Assets/TextMesh Pro/Scripts/Editor/TMP_DropdownEditor.cs new file mode 100644 index 0000000..e3a889f --- /dev/null +++ b/Assets/TextMesh Pro/Scripts/Editor/TMP_DropdownEditor.cs @@ -0,0 +1,60 @@ +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_Placeholder; + SerializedProperty m_ItemText; + SerializedProperty m_ItemImage; + SerializedProperty m_OnSelectionChanged; + SerializedProperty m_Value; + SerializedProperty m_MultiSelect; + SerializedProperty m_AlphaFadeSpeed; + 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_Placeholder = serializedObject.FindProperty("m_Placeholder"); + 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_MultiSelect = serializedObject.FindProperty("m_MultiSelect"); + m_AlphaFadeSpeed = serializedObject.FindProperty("m_AlphaFadeSpeed"); + 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_Placeholder); + EditorGUILayout.PropertyField(m_ItemText); + EditorGUILayout.PropertyField(m_ItemImage); + EditorGUILayout.PropertyField(m_Value); + EditorGUILayout.PropertyField(m_MultiSelect); + EditorGUILayout.PropertyField(m_AlphaFadeSpeed); + EditorGUILayout.PropertyField(m_Options); + EditorGUILayout.PropertyField(m_OnSelectionChanged); + serializedObject.ApplyModifiedProperties(); + } + } +} diff --git a/Assets/TextMesh Pro/Scripts/Editor/TMP_DropdownEditor.cs.meta b/Assets/TextMesh Pro/Scripts/Editor/TMP_DropdownEditor.cs.meta new file mode 100644 index 0000000..30fe004 --- /dev/null +++ b/Assets/TextMesh Pro/Scripts/Editor/TMP_DropdownEditor.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: a2a8381dd0e0f344d8b8a5e83bd20b2b +timeCreated: 1446377461 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TextMesh Pro/Scripts/Editor/TMP_EditorCoroutine.cs b/Assets/TextMesh Pro/Scripts/Editor/TMP_EditorCoroutine.cs new file mode 100644 index 0000000..25e0184 --- /dev/null +++ b/Assets/TextMesh Pro/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 +{ + /// + /// Simple implementation of coroutine working in the Unity Editor. + /// + public class TMP_EditorCoroutine + { + //private static Dictionary s_ActiveCoroutines; + + readonly IEnumerator coroutine; + + /// + /// Constructor + /// + /// + TMP_EditorCoroutine(IEnumerator routine) + { + this.coroutine = routine; + } + + + /// + /// Starts a new EditorCoroutine. + /// + /// Coroutine + /// new EditorCoroutine + 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(); + + // Add new instance of editor coroutine to dictionary. + //s_ActiveCoroutines.Add(coroutine.GetHashCode(), coroutine); + + return coroutine; + } + + + /// + /// Clear delegate list + /// + //public static void StopAllEditorCoroutines() + //{ + // EditorApplication.update = null; + //} + + + /// + /// Register callback for editor updates + /// + void Start() + { + EditorApplication.update += EditorUpdate; + } + + + /// + /// Unregister callback for editor updates. + /// + public void Stop() + { + if (EditorApplication.update != null) + EditorApplication.update -= EditorUpdate; + + //s_ActiveCoroutines.Remove(this.GetHashCode()); + } + + + /// + /// Delegate function called on editor updates. + /// + 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) + { + + } + } + } +} diff --git a/Assets/TextMesh Pro/Scripts/Editor/TMP_EditorCoroutine.cs.meta b/Assets/TextMesh Pro/Scripts/Editor/TMP_EditorCoroutine.cs.meta new file mode 100644 index 0000000..5046fb3 --- /dev/null +++ b/Assets/TextMesh Pro/Scripts/Editor/TMP_EditorCoroutine.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f0dddddc28f728c42a1fed80ba8f95cc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TextMesh Pro/Scripts/Editor/TMP_EditorPanel.cs b/Assets/TextMesh Pro/Scripts/Editor/TMP_EditorPanel.cs new file mode 100644 index 0000000..1b2b891 --- /dev/null +++ b/Assets/TextMesh Pro/Scripts/Editor/TMP_EditorPanel.cs @@ -0,0 +1,205 @@ +using UnityEngine; +using UnityEngine.TextCore.Text; +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."); + + private static string[] k_SortingLayerNames; + bool IsPreset; + + SerializedProperty m_IsVolumetricTextProp; + SerializedProperty m_IsOrthographicProp; + Object[] m_Renderers; + + SerializedObject m_RendererSerializedObject; + SerializedProperty m_RendererSortingLayerProp; + SerializedProperty m_RendererSortingLayerIDProp; + SerializedProperty m_RendererSortingOrderProp; + + SerializedProperty m_TextSortingLayerProp; + SerializedProperty m_TextSortingLayerIDProp; + SerializedProperty m_TextSortingOrderProp; + + + protected override void OnEnable() + { + base.OnEnable(); + + // Determine if the inspected object is a Preset + IsPreset = (int)(target as Component).gameObject.hideFlags == 93; + + m_IsOrthographicProp = serializedObject.FindProperty("m_isOrthographic"); + + m_IsVolumetricTextProp = serializedObject.FindProperty("m_isVolumetricText"); + + m_Renderers = new Object[targets.Length]; + for (int i = 0; i < m_Renderers.Length; i++) + m_Renderers[i] = (targets[i] as TextMeshPro)?.GetComponent(); + + m_RendererSerializedObject = new SerializedObject(m_Renderers); + m_RendererSortingLayerProp = m_RendererSerializedObject.FindProperty("m_SortingLayer"); + m_RendererSortingLayerIDProp = m_RendererSerializedObject.FindProperty("m_SortingLayerID"); + m_RendererSortingOrderProp = m_RendererSerializedObject.FindProperty("m_SortingOrder"); + + m_TextSortingLayerProp = serializedObject.FindProperty("_SortingLayer"); + m_TextSortingLayerIDProp = serializedObject.FindProperty("_SortingLayerID"); + m_TextSortingOrderProp = serializedObject.FindProperty("_SortingOrder"); + + // Populate Sorting Layer Names + k_SortingLayerNames = SortingLayerHelper.sortingLayerNames; + } + + protected override void DrawExtraSettings() + { + Rect rect = EditorGUILayout.GetControlRect(false, 24); + + if (GUI.Button(rect, new GUIContent("Extra Settings"), TMP_UIStyleManager.sectionHeader)) + Foldout.extraSettings = !Foldout.extraSettings; + + GUI.Label(rect, (Foldout.extraSettings ? "" : k_UiStateLabel[1]), TMP_UIStyleManager.rightLabel); + + if (Foldout.extraSettings) + { + //EditorGUI.indentLevel += 1; + + DrawMargins(); + + DrawSortingLayer(); + + DrawGeometrySorting(); + + DrawIsTextObjectScaleStatic(); + + DrawOrthographicMode(); + + DrawRichText(); + + DrawParsing(); + + DrawSpriteAsset(); + + DrawStyleSheet(); + + //DrawVolumetricSetup(); + + DrawKerning(); + + DrawPadding(); + + //EditorGUI.indentLevel -= 1; + } + } + + private void DrawSortingLayer() + { + m_RendererSerializedObject.Update(); + + Rect rect = EditorGUILayout.GetControlRect(true, EditorGUIUtility.singleLineHeight); + + // Special handling for Presets where the sorting layer, id and order is serialized with the text object instead of on the MeshRenderer. + SerializedProperty sortingLayerProp = IsPreset ? m_TextSortingLayerProp : m_RendererSortingLayerProp; + SerializedProperty sortingLayerIDProp = IsPreset ? m_TextSortingLayerIDProp : m_RendererSortingLayerIDProp; + + EditorGUI.BeginProperty(rect, k_SortingLayerLabel, sortingLayerIDProp); + EditorGUI.BeginChangeCheck(); + + int currentLayerIndex = SortingLayerHelper.GetSortingLayerIndexFromSortingLayerID(sortingLayerIDProp.intValue); + int newLayerIndex = EditorGUI.Popup(rect, k_SortingLayerLabel, currentLayerIndex, k_SortingLayerNames); + + if (EditorGUI.EndChangeCheck()) + { + sortingLayerIDProp.intValue = SortingLayer.NameToID(k_SortingLayerNames[newLayerIndex]); + sortingLayerProp.intValue = SortingLayer.GetLayerValueFromName(k_SortingLayerNames[newLayerIndex]); + m_HavePropertiesChanged = true; + + // Sync Sorting Layer ID change on potential sub text object. + TextMeshPro textComponent = m_TextComponent as TextMeshPro; + textComponent.UpdateSubMeshSortingLayerID(sortingLayerIDProp.intValue); + } + + EditorGUI.EndProperty(); + + // Sorting Order + SerializedProperty sortingOrderLayerProp = IsPreset ? m_TextSortingOrderProp : m_RendererSortingOrderProp; + + EditorGUI.BeginChangeCheck(); + + EditorGUILayout.PropertyField(sortingOrderLayerProp, k_OrderInLayerLabel); + + if (EditorGUI.EndChangeCheck()) + { + m_HavePropertiesChanged = true; + + TextMeshPro textComponent = m_TextComponent as TextMeshPro; + textComponent.UpdateSubMeshSortingOrder(sortingOrderLayerProp.intValue); + } + + m_RendererSerializedObject.ApplyModifiedProperties(); + + EditorGUILayout.Space(); + } + + private 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() == 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()); + TextEventManager.ON_TEXTMESHPRO_PROPERTY_CHANGED(true, targets[i] as TextMeshPro); + s_EventId = undoEventId; + } + } + } + + } +} diff --git a/Assets/TextMesh Pro/Scripts/Editor/TMP_EditorPanel.cs.meta b/Assets/TextMesh Pro/Scripts/Editor/TMP_EditorPanel.cs.meta new file mode 100644 index 0000000..9540abb --- /dev/null +++ b/Assets/TextMesh Pro/Scripts/Editor/TMP_EditorPanel.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 87553b56a6d8da547b76fc3c75a5a6f0 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TextMesh Pro/Scripts/Editor/TMP_EditorPanelUI.cs b/Assets/TextMesh Pro/Scripts/Editor/TMP_EditorPanelUI.cs new file mode 100644 index 0000000..6fbbd0b --- /dev/null +++ b/Assets/TextMesh Pro/Scripts/Editor/TMP_EditorPanelUI.cs @@ -0,0 +1,128 @@ +using UnityEngine; +using UnityEngine.TextCore.Text; +using UnityEngine.UI; +using UnityEditor; + +namespace TMPro.EditorUtilities +{ + + [CustomEditor(typeof(TextMeshProUGUI), true), CanEditMultipleObjects] + public class TMP_EditorPanelUI : TMP_BaseEditorPanel + { + static readonly GUIContent k_RaycastTargetLabel = new GUIContent("Raycast Target", "Whether the text blocks raycasts from the Graphic Raycaster."); + static readonly GUIContent k_MaskableLabel = new GUIContent("Maskable", "Determines if the text object will be affected by UI Mask."); + + SerializedProperty m_RaycastTargetProp; + private SerializedProperty m_MaskableProp; + + protected override void OnEnable() + { + base.OnEnable(); + m_RaycastTargetProp = serializedObject.FindProperty("m_RaycastTarget"); + m_MaskableProp = serializedObject.FindProperty("m_Maskable"); + } + + protected override void DrawExtraSettings() + { + Rect rect = EditorGUILayout.GetControlRect(false, 24); + + if (GUI.Button(rect, new GUIContent("Extra Settings"), TMP_UIStyleManager.sectionHeader)) + Foldout.extraSettings = !Foldout.extraSettings; + + GUI.Label(rect, (Foldout.extraSettings ? k_UiStateLabel[0] : k_UiStateLabel[1]), TMP_UIStyleManager.rightLabel); + if (Foldout.extraSettings) + { + //EditorGUI.indentLevel += 1; + + DrawMargins(); + + DrawGeometrySorting(); + + DrawIsTextObjectScaleStatic(); + + DrawRichText(); + + DrawRaycastTarget(); + + DrawMaskable(); + + DrawParsing(); + + DrawSpriteAsset(); + + DrawStyleSheet(); + + 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(); + for (int i = 1; i < graphicComponents.Length; i++) + graphicComponents[i].raycastTarget = m_RaycastTargetProp.boolValue; + + m_HavePropertiesChanged = true; + } + } + + protected void DrawMaskable() + { + if (m_MaskableProp == null) + return; + + EditorGUI.BeginChangeCheck(); + EditorGUILayout.PropertyField(m_MaskableProp, k_MaskableLabel); + if (EditorGUI.EndChangeCheck()) + { + m_TextComponent.maskable = m_MaskableProp.boolValue; + + // Change needs to propagate to the child sub objects. + MaskableGraphic[] maskableGraphics = m_TextComponent.GetComponentsInChildren(); + for (int i = 1; i < maskableGraphics.Length; i++) + maskableGraphics[i].maskable = m_MaskableProp.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() == 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()); + TextEventManager.ON_TEXTMESHPRO_UGUI_PROPERTY_CHANGED(true, targets[i] as TextMeshProUGUI); + s_EventId = undoEventId; + } + } + } + } +} diff --git a/Assets/TextMesh Pro/Scripts/Editor/TMP_EditorPanelUI.cs.meta b/Assets/TextMesh Pro/Scripts/Editor/TMP_EditorPanelUI.cs.meta new file mode 100644 index 0000000..2c82d21 --- /dev/null +++ b/Assets/TextMesh Pro/Scripts/Editor/TMP_EditorPanelUI.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 115c3ac795553ef46a889d1af5ff4f10 +timeCreated: 1443571501 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TextMesh Pro/Scripts/Editor/TMP_EditorUtility.cs b/Assets/TextMesh Pro/Scripts/Editor/TMP_EditorUtility.cs new file mode 100644 index 0000000..3a0ca28 --- /dev/null +++ b/Assets/TextMesh Pro/Scripts/Editor/TMP_EditorUtility.cs @@ -0,0 +1,448 @@ +using System.Collections.Generic; +using System.IO; +using UnityEngine; +using UnityEngine.TextCore.Text; +using UnityEditor; + + +namespace TMPro.EditorUtilities +{ + public static class TMP_EditorUtility + { + /// + /// Returns the relative path of the package. + /// + public static string packageRelativePath + { + get + { + if (string.IsNullOrEmpty(m_PackagePath)) + m_PackagePath = GetPackageRelativePath(); + + return m_PackagePath; + } + } + [SerializeField] + private static string m_PackagePath; + + /// + /// Returns the fully qualified path of the package. + /// + 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); + } + + + internal static void RepaintAll() + { + if (isInitialized == false) + { + GetGameview(); + isInitialized = true; + } + + SceneView.RepaintAll(); + Gameview.Repaint(); + } + + + /// + /// Create and return a new asset in a smart location based on the current selection and then select it. + /// + /// + /// Name of the new asset. Do not include the .asset extension. + /// + /// + /// The new asset. + /// + internal static T CreateAsset(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(); + 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. + internal static Material[] FindMaterialReferences(FontAsset fontAsset) + { + List refs = new List(); + 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(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. + internal static 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++) + { + FontAsset fontAsset = AssetDatabase.LoadAssetAtPath(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; + } + + + /// + /// Method to validate the location of the asset folder by making sure the GUISkins folder exists. + /// + /// + /// + 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; + } + + + /// + /// Function which returns a string containing a sequence of Decimal character ranges. + /// + /// + /// + internal 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; + } + + + /// + /// Function which returns a string containing a sequence of Unicode (Hex) character ranges. + /// + /// + /// + internal 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; + } + + + /// + /// + /// + /// + /// + /// + internal 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); + } + + + /// + /// Function to return the horizontal alignment grid value. + /// + /// + /// + internal 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; + } + + /// + /// Function to return the vertical alignment grid value. + /// + /// + /// + internal 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; + } + + internal 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; + } + + internal 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/Assets/TextMesh Pro/Scripts/Editor/TMP_EditorUtility.cs.meta b/Assets/TextMesh Pro/Scripts/Editor/TMP_EditorUtility.cs.meta new file mode 100644 index 0000000..b23942e --- /dev/null +++ b/Assets/TextMesh Pro/Scripts/Editor/TMP_EditorUtility.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 8c86041acbae1bb4a823635abfeb5c5d +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TextMesh Pro/Scripts/Editor/TMP_FontAsset_CreationMenu.cs b/Assets/TextMesh Pro/Scripts/Editor/TMP_FontAsset_CreationMenu.cs new file mode 100644 index 0000000..dc519dc --- /dev/null +++ b/Assets/TextMesh Pro/Scripts/Editor/TMP_FontAsset_CreationMenu.cs @@ -0,0 +1,267 @@ +using System.Collections.Generic; +using System.IO; +using UnityEngine; +using UnityEngine.TextCore; +using UnityEngine.TextCore.LowLevel; +using UnityEngine.TextCore.Text; +using UnityEditor; + + +namespace TMPro +{ + public static class TMP_FontAsset_CreationMenu + { + [MenuItem("Assets/Create/TextMeshPro/Font Asset Variant", false, 105)] + public static void CreateFontAssetVariant() + { + Object target = Selection.activeObject; + + // Make sure the selection is a font file + if (target == null || target.GetType() != typeof(FontAsset)) + { + Debug.LogWarning("A Font file must first be selected in order to create a Font Asset."); + return; + } + + // Make sure TMP Essential Resources have been imported in the user project. + if (TMP_Settings.instance == null) + { + Debug.Log("Unable to create font asset. Please import the TMP Essential Resources."); + return; + } + + FontAsset sourceFontAsset = (FontAsset)target; + + string sourceFontFilePath = AssetDatabase.GetAssetPath(target); + + string folderPath = Path.GetDirectoryName(sourceFontFilePath); + string assetName = Path.GetFileNameWithoutExtension(sourceFontFilePath); + + string newAssetFilePathWithName = AssetDatabase.GenerateUniqueAssetPath(folderPath + "/" + assetName + " - Variant.asset"); + + // Set Texture and Material reference to the source font asset. + FontAsset fontAsset = ScriptableObject.Instantiate(sourceFontAsset); + AssetDatabase.CreateAsset(fontAsset, newAssetFilePathWithName); + + fontAsset.atlasPopulationMode = UnityEngine.TextCore.Text.AtlasPopulationMode.Static; + + // Initialize array for the font atlas textures. + fontAsset.atlasTextures = sourceFontAsset.atlasTextures; + fontAsset.material = sourceFontAsset.material; + + // Not sure if this is still necessary in newer versions of Unity. + EditorUtility.SetDirty(fontAsset); + + AssetDatabase.SaveAssets(); + } + + + /* + [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(); + 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() { new GlyphRect(0, 0, atlasWidth - packingModifier, atlasHeight - packingModifier) }; + fontAsset.m_UsedGlyphRects = new List(); + + // 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[] targets = Selection.objects; + + if (targets == null) + { + Debug.LogWarning("A Font file must first be selected in order to create a Font Asset."); + return; + } + + // Make sure TMP Essential Resources have been imported in the user project. + if (TMP_Settings.instance == null) + { + Debug.Log("Unable to create font asset. Please import the TMP Essential Resources."); + + // Show Window to Import TMP Essential Resources + return; + } + + for (int i = 0; i < targets.Length; i++) + { + Object target = targets[i]; + + // Make sure the selection is a font file + if (target == null || target.GetType() != typeof(Font)) + { + Debug.LogWarning("Selected Object [" + target.name + "] is not a Font file. A Font file must be selected in order to create a Font Asset.", target); + continue; + } + + CreateFontAssetFromSelectedObject(target); + } + } + + static void CreateFontAssetFromSelectedObject(Object target) + { + Font font = (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"); + + // Initialize FontEngine + FontEngine.InitializeFontEngine(); + + // Load Font Face + if (FontEngine.LoadFontFace(font, 90) != FontEngineError.Success) + { + Debug.LogWarning("Unable to load font face for [" + font.name + "]. Make sure \"Include Font Data\" is enabled in the Font Import Settings.", font); + return; + } + + // Create new Font Asset + FontAsset fontAsset = ScriptableObject.CreateInstance(); + AssetDatabase.CreateAsset(fontAsset, newAssetFilePathWithName); + + fontAsset.version = "1.1.0"; + fontAsset.faceInfo = FontEngine.GetFaceInfo(); + + // Set font reference and GUID + fontAsset.sourceFontFile = font; + fontAsset.m_SourceFontFileGUID = AssetDatabase.AssetPathToGUID(sourceFontFilePath); + fontAsset.m_SourceFontFile_EditorRef = font; + + fontAsset.atlasPopulationMode = UnityEngine.TextCore.Text.AtlasPopulationMode.Dynamic; + fontAsset.clearDynamicDataOnBuild = TMP_Settings.clearDynamicDataOnBuild; + + // 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() { new GlyphRect(0, 0, atlasWidth - packingModifier, atlasHeight - packingModifier) }; + fontAsset.usedGlyphRects = new List(); + + // 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.regularStyleWeight); + tmp_material.SetFloat(ShaderUtilities.ID_WeightBold, fontAsset.boldStyleWeight); + + fontAsset.material = tmp_material; + + AssetDatabase.AddObjectToAsset(tmp_material, fontAsset); + + // Add Font Asset Creation Settings + fontAsset.fontAssetCreationEditorSettings = new FontAssetCreationEditorSettings(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(); + } + } +} diff --git a/Assets/TextMesh Pro/Scripts/Editor/TMP_FontAsset_CreationMenu.cs.meta b/Assets/TextMesh Pro/Scripts/Editor/TMP_FontAsset_CreationMenu.cs.meta new file mode 100644 index 0000000..310b0b6 --- /dev/null +++ b/Assets/TextMesh Pro/Scripts/Editor/TMP_FontAsset_CreationMenu.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4f85302336d038c4da80ea264d185657 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TextMesh Pro/Scripts/Editor/TMP_InputFieldEditor.cs b/Assets/TextMesh Pro/Scripts/Editor/TMP_InputFieldEditor.cs new file mode 100644 index 0000000..8e9f536 --- /dev/null +++ b/Assets/TextMesh Pro/Scripts/Editor/TMP_InputFieldEditor.cs @@ -0,0 +1,296 @@ +using UnityEngine; +using UnityEngine.TextCore.Text; +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_KeepTextSelectionVisible; + SerializedProperty m_RestoreOriginalTextOnEscape; + SerializedProperty m_ShouldActivateOnSelect; + + 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_KeepTextSelectionVisible = serializedObject.FindProperty("m_KeepTextSelectionVisible"); + m_RestoreOriginalTextOnEscape = serializedObject.FindProperty("m_RestoreOriginalTextOnEscape"); + + m_OnFocusSelectAll = serializedObject.FindProperty("m_OnFocusSelectAll"); + m_ShouldActivateOnSelect = serializedObject.FindProperty("m_ShouldActivateOnSelect"); + + 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 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.textWrappingMode = TextWrappingModes.PreserveWhitespaceNoWrap; + else + { + text.textWrappingMode = TextWrappingModes.Normal; + } + } + } + + 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 looses focus and is Deactivated?")); + + EditorGUI.indentLevel++; + GUI.enabled = !m_ResetOnDeActivation.boolValue; + EditorGUILayout.PropertyField(m_KeepTextSelectionVisible, new GUIContent("Keep Text Selection Visible", "Should the text selection remain visible when the input field looses focus and is deactivated?")); + GUI.enabled = true; + EditorGUI.indentLevel--; + + EditorGUILayout.PropertyField(m_RestoreOriginalTextOnEscape, new GUIContent("Restore On ESC Key", "Should the original text be restored when pressing ESC?")); + EditorGUILayout.PropertyField(m_ShouldActivateOnSelect, new GUIContent("Should Activate On Select", "Determines if the Input Field will be activated when selected.")); + 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.")); + 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/Assets/TextMesh Pro/Scripts/Editor/TMP_InputFieldEditor.cs.meta b/Assets/TextMesh Pro/Scripts/Editor/TMP_InputFieldEditor.cs.meta new file mode 100644 index 0000000..17f5be6 --- /dev/null +++ b/Assets/TextMesh Pro/Scripts/Editor/TMP_InputFieldEditor.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 93f8eb123b3a5584788171226e3095ff +timeCreated: 1457861621 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TextMesh Pro/Scripts/Editor/TMP_MarkupTagUpdateUtility.cs b/Assets/TextMesh Pro/Scripts/Editor/TMP_MarkupTagUpdateUtility.cs new file mode 100644 index 0000000..e6fbe93 --- /dev/null +++ b/Assets/TextMesh Pro/Scripts/Editor/TMP_MarkupTagUpdateUtility.cs @@ -0,0 +1,282 @@ +using System.Collections.Generic; +using UnityEditor; +using UnityEngine; + + +internal class TMP_MarkupTagUpdateUtility +{ + struct MarkupTagDescriptor + { + public string name; + public string tag; + public string description; + + public MarkupTagDescriptor(string name, string tag, string description) + { + this.name = name; + this.tag = tag; + this.description = description; + } + + public MarkupTagDescriptor(string name) + { + this.name = name; + this.tag = null; + this.description = null; + } + + public static MarkupTagDescriptor linefeed = new MarkupTagDescriptor("\n"); + } + + private static MarkupTagDescriptor[] m_MarkupTags = + { + new MarkupTagDescriptor("BOLD", "b", "// "), + new MarkupTagDescriptor("SLASH_BOLD", "/b", "// "), + new MarkupTagDescriptor("ITALIC", "i", "// "), + new MarkupTagDescriptor("SLASH_ITALIC", "/i", "// "), + new MarkupTagDescriptor("UNDERLINE", "u", "// "), + new MarkupTagDescriptor("SLASH_UNDERLINE", "/u", "// "), + new MarkupTagDescriptor("STRIKETHROUGH", "s", "// "), + new MarkupTagDescriptor("SLASH_STRIKETHROUGH", "/s", "// "), + new MarkupTagDescriptor("SUBSCRIPT", "sub", "// "), + new MarkupTagDescriptor("SLASH_SUBSCRIPT", "/sub", "// "), + new MarkupTagDescriptor("SUPERSCRIPT", "sup", "// "), + new MarkupTagDescriptor("SLASH_SUPERSCRIPT", "/sup", "// "), + new MarkupTagDescriptor("MARK", "mark", "// "), + new MarkupTagDescriptor("SLASH_MARK", "/mark", "// "), + MarkupTagDescriptor.linefeed, + + new MarkupTagDescriptor("COLOR", "color", "// "), + new MarkupTagDescriptor("SLASH_COLOR", "/color", "// "), + new MarkupTagDescriptor("ALPHA", "alpha", "// "), + new MarkupTagDescriptor("SLASH_ALPHA", "/alpha", "// "), + MarkupTagDescriptor.linefeed, + + new MarkupTagDescriptor("FONT", "font", "// or " ), + new MarkupTagDescriptor("SLASH_FONT", "/font", "// "), + new MarkupTagDescriptor("MATERIAL", "material", "// or as attribute "), + new MarkupTagDescriptor("SLASH_MATERIAL", "/material", "// "), + new MarkupTagDescriptor("SIZE", "size", "// "), + new MarkupTagDescriptor("SLASH_SIZE", "/size", "// "), + new MarkupTagDescriptor("FONT_WEIGHT", "font-weight", "// "), + new MarkupTagDescriptor("SLASH_FONT_WEIGHT", "/font-weight", "// "), + new MarkupTagDescriptor("SCALE", "scale", "// "), + new MarkupTagDescriptor("SLASH_SCALE", "/scale", "// "), + MarkupTagDescriptor.linefeed, + + new MarkupTagDescriptor("SPRITE", "sprite", "// "), + new MarkupTagDescriptor("STYLE", "style", "// "), + new MarkupTagDescriptor("GRADIENT", "gradient", "// "), + new MarkupTagDescriptor("SLASH_GRADIENT", "/gradient", "// "), + MarkupTagDescriptor.linefeed, + + new MarkupTagDescriptor("A", "a", "// "), + new MarkupTagDescriptor("SLASH_A", "/a", "// "), + new MarkupTagDescriptor("LINK", "link", "// "), + new MarkupTagDescriptor("SLASH_LINK", "/link", "// "), + MarkupTagDescriptor.linefeed, + + new MarkupTagDescriptor("POSITION", "pos", "// "), + new MarkupTagDescriptor("SLASH_POSITION", "/pos", "// "), + new MarkupTagDescriptor("VERTICAL_OFFSET", "voffset","// "), + new MarkupTagDescriptor("SLASH_VERTICAL_OFFSET", "/voffset", "// "), + new MarkupTagDescriptor("ROTATE", "rotate", "// "), + new MarkupTagDescriptor("SLASH_ROTATE", "/rotate", "// "), + new MarkupTagDescriptor("TRANSFORM", "transform","// "), + new MarkupTagDescriptor("SLASH_TRANSFORM", "/transform", "// "), + new MarkupTagDescriptor("SPACE", "space", "// "), + new MarkupTagDescriptor("SLASH_SPACE", "/space", "// "), + new MarkupTagDescriptor("CHARACTER_SPACE", "cspace", "// "), + new MarkupTagDescriptor("SLASH_CHARACTER_SPACE", "/cspace", "// "), + new MarkupTagDescriptor("MONOSPACE", "mspace", "// "), + new MarkupTagDescriptor("SLASH_MONOSPACE", "/mspace", "// "), + new MarkupTagDescriptor("CHARACTER_SPACING", "character-spacing", "// "), + new MarkupTagDescriptor("SLASH_CHARACTER_SPACING", "/character-spacing", "// "), + MarkupTagDescriptor.linefeed, + + new MarkupTagDescriptor("ALIGN", "align", "// "), + new MarkupTagDescriptor("SLASH_ALIGN", "/align", "// "), + new MarkupTagDescriptor("WIDTH", "width", "// "), + new MarkupTagDescriptor("SLASH_WIDTH", "/width", "// "), + new MarkupTagDescriptor("MARGIN", "margin", "// "), + new MarkupTagDescriptor("SLASH_MARGIN", "/margin", "// "), + new MarkupTagDescriptor("MARGIN_LEFT", "margin-left", "// "), + new MarkupTagDescriptor("MARGIN_RIGHT", "margin-right", "// "), + new MarkupTagDescriptor("INDENT", "indent", "// "), + new MarkupTagDescriptor("SLASH_INDENT", "/indent", "// "), + new MarkupTagDescriptor("LINE_INDENT", "line-indent", "// "), + new MarkupTagDescriptor("SLASH_LINE_INDENT", "/line-indent", "// "), + new MarkupTagDescriptor("LINE_HEIGHT", "line-height", "// "), + new MarkupTagDescriptor("SLASH_LINE_HEIGHT", "/line-height", "// "), + MarkupTagDescriptor.linefeed, + + new MarkupTagDescriptor("NO_BREAK", "nobr", "// "), + new MarkupTagDescriptor("SLASH_NO_BREAK", "/nobr", "// "), + new MarkupTagDescriptor("NO_PARSE", "noparse","// "), + new MarkupTagDescriptor("SLASH_NO_PARSE", "/noparse", "// "), + new MarkupTagDescriptor("PAGE", "page", "// "), + new MarkupTagDescriptor("SLASH_PAGE", "/page", "// "), + MarkupTagDescriptor.linefeed, + + new MarkupTagDescriptor("ACTION", "action", "// "), + new MarkupTagDescriptor("SLASH_ACTION", "/action", "// "), + MarkupTagDescriptor.linefeed, + + new MarkupTagDescriptor("CLASS", "class", "// "), + new MarkupTagDescriptor("TABLE", "table", "// "), + new MarkupTagDescriptor("SLASH_TABLE", "/table", "//
"), + new MarkupTagDescriptor("TH", "th", "// "), + new MarkupTagDescriptor("SLASH_TH", "/th", "// "), + new MarkupTagDescriptor("TR", "tr", "// "), + new MarkupTagDescriptor("SLASH_TR", "/tr", "// "), + new MarkupTagDescriptor("TD", "td", "// "), + new MarkupTagDescriptor("SLASH_TD", "/td", "// "), + MarkupTagDescriptor.linefeed, + + new MarkupTagDescriptor("// Text Styles"), + new MarkupTagDescriptor("LOWERCASE", "lowercase", "// "), + new MarkupTagDescriptor("SLASH_LOWERCASE", "/lowercase", "// "), + new MarkupTagDescriptor("ALLCAPS", "allcaps", "// "), + new MarkupTagDescriptor("SLASH_ALLCAPS", "/allcaps", "// "), + new MarkupTagDescriptor("UPPERCASE", "uppercase", "// "), + new MarkupTagDescriptor("SLASH_UPPERCASE", "/uppercase", "// "), + new MarkupTagDescriptor("SMALLCAPS", "smallcaps", "// "), + new MarkupTagDescriptor("SLASH_SMALLCAPS", "/smallcaps", "// "), + new MarkupTagDescriptor("CAPITALIZE", "capitalize", "// "), + new MarkupTagDescriptor("SLASH_CAPITALIZE", "/capitalize", "// "), + MarkupTagDescriptor.linefeed, + + new MarkupTagDescriptor("// Font Features"), + new MarkupTagDescriptor("LIGA", "liga", "// "), + new MarkupTagDescriptor("SLASH_LIGA", "/liga", "// "), + new MarkupTagDescriptor("FRAC", "frac", "// "), + new MarkupTagDescriptor("SLASH_FRAC", "/frac", "// "), + MarkupTagDescriptor.linefeed, + + new MarkupTagDescriptor("// Attributes"), + new MarkupTagDescriptor("NAME", "name", "// "), + new MarkupTagDescriptor("INDEX", "index", "// "), + new MarkupTagDescriptor("TINT", "tint", "// "), + new MarkupTagDescriptor("ANIM", "anim", "// "), + new MarkupTagDescriptor("HREF", "href", "// text to be displayed."), + new MarkupTagDescriptor("ANGLE", "angle", "// Italic Slant Angle"), + new MarkupTagDescriptor("FAMILY", "family", "// "), + MarkupTagDescriptor.linefeed, + + new MarkupTagDescriptor("// Named Colors"), + new MarkupTagDescriptor("RED", "red",""), + new MarkupTagDescriptor("GREEN", "green", ""), + new MarkupTagDescriptor("BLUE", "blue", ""), + new MarkupTagDescriptor("WHITE", "white", ""), + new MarkupTagDescriptor("BLACK", "black", ""), + new MarkupTagDescriptor("CYAN", "cyna", ""), + new MarkupTagDescriptor("MAGENTA", "magenta", ""), + new MarkupTagDescriptor("YELLOW", "yellow", ""), + new MarkupTagDescriptor("ORANGE", "orange", ""), + new MarkupTagDescriptor("PURPLE", "purple", ""), + MarkupTagDescriptor.linefeed, + + new MarkupTagDescriptor("// Unicode Characters"), + new MarkupTagDescriptor("BR", "br", "//
Line Feed (LF) \\u0A"), + new MarkupTagDescriptor("ZWSP", "zwsp", "// Zero Width Space \\u200B"), + new MarkupTagDescriptor("NBSP", "nbsp", "// Non Breaking Space \\u00A0"), + new MarkupTagDescriptor("SHY", "shy", "// Soft Hyphen \\u00AD"), + new MarkupTagDescriptor("ZWJ", "zwj", "// Zero Width Joiner \\u200D"), + new MarkupTagDescriptor("WJ", "wj", "// Word Joiner \\u2060"), + MarkupTagDescriptor.linefeed, + + new MarkupTagDescriptor("// Alignment"), + new MarkupTagDescriptor("LEFT", "left", "// "), + new MarkupTagDescriptor("RIGHT", "right", "// "), + new MarkupTagDescriptor("CENTER", "center", "// "), + new MarkupTagDescriptor("JUSTIFIED", "justified", "// "), + new MarkupTagDescriptor("FLUSH", "flush", "// "), + MarkupTagDescriptor.linefeed, + + new MarkupTagDescriptor("// Prefix and Unit suffix"), + new MarkupTagDescriptor("NONE", "none", ""), + new MarkupTagDescriptor("PLUS", "+", ""), + new MarkupTagDescriptor("MINUS", "-", ""), + new MarkupTagDescriptor("PX", "px", ""), + new MarkupTagDescriptor("PLUS_PX", "+px", ""), + new MarkupTagDescriptor("MINUS_PX", "-px", ""), + new MarkupTagDescriptor("EM", "em", ""), + new MarkupTagDescriptor("PLUS_EM", "+em", ""), + new MarkupTagDescriptor("MINUS_EM", "-em", ""), + new MarkupTagDescriptor("PCT", "pct", ""), + new MarkupTagDescriptor("PLUS_PCT", "+pct", ""), + new MarkupTagDescriptor("MINUS_PCT", "-pct", ""), + new MarkupTagDescriptor("PERCENTAGE", "%", ""), + new MarkupTagDescriptor("PLUS_PERCENTAGE", "+%", ""), + new MarkupTagDescriptor("MINUS_PERCENTAGE", "-%", ""), + new MarkupTagDescriptor("HASH", "#", "// #"), + MarkupTagDescriptor.linefeed, + + new MarkupTagDescriptor("TRUE", "true", ""), + new MarkupTagDescriptor("FALSE", "false", ""), + MarkupTagDescriptor.linefeed, + + new MarkupTagDescriptor("INVALID", "invalid", ""), + MarkupTagDescriptor.linefeed, + + new MarkupTagDescriptor("NORMAL", "normal", "// "), + new MarkupTagDescriptor("DEFAULT", "default", "// "), + }; + + + [MenuItem("Window/TextMeshPro/Internal/Update Markup Tag Hash Codes", false, 2200, true)] + static void UpdateMarkupTagHashCodes() + { + Dictionary markupHashCodes = new Dictionary(); + string output = string.Empty; + + for (int i = 0; i < m_MarkupTags.Length; i++) + { + MarkupTagDescriptor descriptor = m_MarkupTags[i]; + int hashCode = descriptor.tag == null ? 0 : GetHashCodeCaseInSensitive(descriptor.tag); + + if (descriptor.name == "\n") + output += "\n"; + else if (hashCode == 0) + output += descriptor.name + "\n"; + else + { + output += descriptor.name + " = " + hashCode + ",\t" + descriptor.description + "\n"; + + if (markupHashCodes.ContainsKey(hashCode) == false) + markupHashCodes.Add(hashCode, descriptor); + else + Debug.Log("[" + descriptor.name + "] with HashCode [" + hashCode + "] collides with [" + markupHashCodes[hashCode].name + "]."); + } + } + + Debug.Log(output); + } + + /// + /// Table used to convert character to uppercase. + /// + const string k_lookupStringU = "-------------------------------- !-#$%&-()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[-]^_`ABCDEFGHIJKLMNOPQRSTUVWXYZ{|}~-"; + + /// + /// Get uppercase version of this ASCII character. + /// + public static char ToUpperFast(char c) + { + if (c > k_lookupStringU.Length - 1) + return c; + + return k_lookupStringU[c]; + } + + public static int GetHashCodeCaseInSensitive(string s) + { + int hashCode = 5381; + + for (int i = 0; i < s.Length; i++) + hashCode = (hashCode << 5) + hashCode ^ ToUpperFast(s[i]); + + return hashCode; + } +} diff --git a/Assets/TextMesh Pro/Scripts/Editor/TMP_MarkupTagUpdateUtility.cs.meta b/Assets/TextMesh Pro/Scripts/Editor/TMP_MarkupTagUpdateUtility.cs.meta new file mode 100644 index 0000000..c7b8ae8 --- /dev/null +++ b/Assets/TextMesh Pro/Scripts/Editor/TMP_MarkupTagUpdateUtility.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 225b67dcce9247b4c806e435b34695d2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TextMesh Pro/Scripts/Editor/TMP_PackageUtilities.cs b/Assets/TextMesh Pro/Scripts/Editor/TMP_PackageUtilities.cs new file mode 100644 index 0000000..8bb573a --- /dev/null +++ b/Assets/TextMesh Pro/Scripts/Editor/TMP_PackageUtilities.cs @@ -0,0 +1,1118 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Globalization; +using System.IO; +using System.Linq; +using System.Threading; +using TMPro.EditorUtilities; +using UnityEngine; +using UnityEngine.TextCore.Text; +using UnityEditor; + + +namespace TMPro +{ + // Suppressing warnings related to the use of private structures which are confusing the compiler as these data structures are used by .json files. + #pragma warning disable 0649 + + /// + /// 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. + /// + [System.Serializable] + struct AssetConversionRecord + { + public string referencedResource; + public string target; + public string replacement; + } + + + /// + /// 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. + /// + [System.Serializable] + class AssetConversionData + { + public List assetRecords; + } + + internal class TMP_ProjectTextSpacingConversionTool : EditorWindow + { + // Create Text Spacing Conversion Tool window + [MenuItem("Window/TextMeshPro/Project Text Spacing Conversion Tool", false, 2110)] + static void ShowConverterWindow() + { + var window = GetWindow(); + window.titleContent = new GUIContent("Conversion Tool"); + window.Focus(); + } + + /// + /// + /// + struct AssetModificationRecord + { + public string assetFilePath; + public string assetDataFile; + } + + struct AssetFileRecord + { + public string assetFilePath; + + public AssetFileRecord(string filePath, string metaFilePath) + { + this.assetFilePath = filePath; + } + } + + private static string m_ProjectPath; + [SerializeField] private string m_ProjectFolderToScan; + private static bool m_IsAlreadyScanningProject; + private static bool m_CancelScanProcess; + private static string k_ProjectScanReportDefaultText = "" + + " Character Word Line Paragraph\n" + + "Project Scan Results Spacing Spacing Spacing Spacing
\n" + + "------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------\n"; + + [SerializeField] private GUIStyle m_OutputWindowStyle; + [SerializeField] private Font m_OutputWindowMonospacedFont; + 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_ScanningCurrentFileIndex; + private static string m_ScanningCurrentFileName; + + private static string k_TextMeshProScriptID = "m_Script: {fileID: 11500000, guid: 9541d86e2fd84c1d9990edf0852d74ab, type: 3}"; + private static string k_TextMeshProUGUIScriptID = "m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3}"; + //private static string k_FontAssetScriptID = "m_Script: {fileID: 11500000, guid: 71c1514a6bd24e1e882cebbe1904ce04, type: 3}"; + + private static string k_FontAssetProperty = "m_fontAsset: "; + private static string k_FontSizeProperty = "m_fontSize: "; + private static string k_LineSpacingProperty = "m_lineSpacing: "; + private static string k_CharacterSpacingProperty = "m_characterSpacing: "; + private static string k_WordSpacingProperty = "m_wordSpacing: "; + private static string k_ParagraphSpacingProperty = "m_paragraphSpacing: "; + + private static AssetConversionData m_ConversionData; + + private static readonly List m_ModifiedAssetList = new List(); + + void OnEnable() + { + // Set Editor Window Size + SetEditorWindowSize(); + + m_ProjectScanResults = k_ProjectScanReportDefaultText; + + // Define new style with monospaced font (if we have not already done so). + if (m_OutputWindowStyle == null || m_OutputWindowMonospacedFont == null) + { + if (m_OutputWindowMonospacedFont == null) + m_OutputWindowMonospacedFont = Font.CreateDynamicFontFromOSFont("Courier New", 13); + + if (m_OutputWindowStyle == null) + { + m_OutputWindowStyle = new GUIStyle() {font = m_OutputWindowMonospacedFont, richText = true}; + m_OutputWindowStyle.normal.textColor = new Color(0.95f, 0.95f, 0.95f, 1f); + } + else + { + m_OutputWindowStyle.font = m_OutputWindowMonospacedFont; + } + } + } + + void OnGUI() + { + // Define new style with monospaced font (if we have not already done so). + if (m_OutputWindowStyle == null || m_OutputWindowMonospacedFont == null) + { + if (m_OutputWindowMonospacedFont == null) + m_OutputWindowMonospacedFont = Font.CreateDynamicFontFromOSFont("Courier New", 13); + + if (m_OutputWindowStyle == null) + { + m_OutputWindowStyle = new GUIStyle() {font = m_OutputWindowMonospacedFont, richText = true}; + m_OutputWindowStyle.normal.textColor = new Color(0.95f, 0.95f, 0.95f, 1f); + } + else + { + m_OutputWindowStyle.font = m_OutputWindowMonospacedFont; + } + } + + GUILayout.BeginVertical(); + { + // Scan project files and resources + GUILayout.BeginVertical(EditorStyles.helpBox); + { + GUILayout.Label("Scan Project Files", EditorStyles.boldLabel); + GUILayout.Label("Press the Scan Project Files button to begin scanning your project for Scenes and Prefabs containing text objects whose line spacing values might need to be converted to the new (em) line spacing values.", 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)); + GUILayout.Label(m_ProjectScanResults, m_OutputWindowStyle); + 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 Save Modified Project Files button will update the files in the Project Scan Results listed above. Please make sure that you have created a backup of your project first
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(); + } + + + /// + /// Limits the minimum size of the editor window. + /// + void SetEditorWindowSize() + { + EditorWindow editorWindow = this; + + Vector2 currentWindowSize = editorWindow.minSize; + + editorWindow.minSize = new Vector2(Mathf.Max(1024, currentWindowSize.x), Mathf.Max(420, currentWindowSize.y)); + } + + 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; + + // 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 = "Phase 1 - Filtering: "; + m_ScanningTotalFiles = guids.Length; + m_ScanningCurrentFileIndex = 0; + + List projectFilesToScan = new List(); + + 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; + + string fileExtension = Path.GetExtension(assetFilePath); + Type fileType = AssetDatabase.GetMainAssetTypeAtPath(assetFilePath); + + // Ignore all files other than Scenes and Prefabs. + if ((fileType == typeof(SceneAsset) || (fileType == typeof(GameObject) && fileExtension.ToLower() == ".prefab")) == false) + continue; + + string assetMetaFilePath = AssetDatabase.GetTextMetaFilePathFromAssetPath(assetFilePath); + + projectFilesToScan.Add(new AssetFileRecord(assetFilePath, assetMetaFilePath)); + + yield return null; + } + + m_ScanningTotalFiles = projectFilesToScan.Count; + + k_ProjectScanLabelPrefix = "Phase 2 - Scanning: "; + m_ScanningCurrentFileIndex = 0; + + for (int i = 0; i < m_ScanningTotalFiles; i++) + { + if (m_CancelScanProcess) + break; + + AssetFileRecord fileRecord = projectFilesToScan[i]; + + ScanProjectFile(fileRecord); + + m_ScanningCurrentFileName = fileRecord.assetFilePath; + + m_ScanningCurrentFileIndex += 1; + m_ProgressPercentage = (float)m_ScanningCurrentFileIndex / m_ScanningTotalFiles; + + yield return null; + } + + m_IsAlreadyScanningProject = false; + m_ScanningCurrentFileName = string.Empty; + } + + + static void ScanProjectFile(AssetFileRecord fileRecord) + { + if (m_CancelScanProcess) + return; + + // Read the asset data file + string assetDataFile; + bool hasDataFileChanged = false; + + try + { + assetDataFile = File.ReadAllText(m_ProjectPath + "/" + fileRecord.assetFilePath); + } + catch + { + // Continue to the next asset if we can't read the current one. + return; + } + + // Check if asset file references any text components. + if (assetDataFile.Contains(k_TextMeshProScriptID) || assetDataFile.Contains(k_TextMeshProUGUIScriptID)) + { + float characterSpacingValue = 0; + float newCharacterSpacingValue = 0; + float wordSpacingValue = 0; + float newWordSpacingValue = 0; + float lineSpacingValue = 0; + float newLineSpacingValue = 0; + float paragraphSpacingValue = 0; + float newParagraphSpacingValue = 0; + + float fontSize = 0; + float samplingPointSize = 0; + float faceScale = 1; + + List lines = assetDataFile.Split('\n').ToList(); + int serializedVersionInsertionIndex = 0; + + int readingFlag = 0; + + // Read through each lines of the asset file + for (int i = 0; i < lines.Count; i++) + { + string line = lines[i]; + + // Track potential line index to insert serializedVersion property + if (line.Contains("MonoBehaviour:")) + { + serializedVersionInsertionIndex = i + 1; + continue; + } + + // Read until we find the line that contains a reference to a text component + if (readingFlag == 0 && (line.Contains(k_TextMeshProScriptID) || line.Contains(k_TextMeshProUGUIScriptID))) + { + // Check if spacing values for this component have already been converted + if (lines[serializedVersionInsertionIndex].Contains(" m_SerializedVersion: 1")) + { + readingFlag = 0; + continue; + } + + lines.Insert(serializedVersionInsertionIndex, " m_SerializedVersion: 1"); + readingFlag = 1; + continue; + } + + // Keep reading until we find the font asset property field. + if (readingFlag == 1) + { + // Check for font asset property + if (line.Contains(k_FontAssetProperty)) + { + int guidIndex = line.IndexOf("guid: ", StringComparison.InvariantCulture); + if (guidIndex != -1) + { + string guid = line.Substring(guidIndex + 6, 32); + FontAsset fontAsset = AssetDatabase.LoadAssetAtPath(AssetDatabase.GUIDToAssetPath(guid)); + if (fontAsset != null) + { + samplingPointSize = fontAsset.faceInfo.pointSize; + faceScale = fontAsset.faceInfo.scale; + } + } + + readingFlag = 2; + continue; + } + } + + // Read font size property + if (readingFlag == 2) + { + if (line.Contains(k_FontSizeProperty)) + { + fontSize = float.Parse(line.Split(':')[1], NumberStyles.Float, CultureInfo.InvariantCulture); + readingFlag = 3; + continue; + } + } + + // Check for the spacing properties that need to be converted + if (readingFlag == 3) + { + // Read character spacing + if (line.Contains(k_CharacterSpacingProperty)) + { + characterSpacingValue = float.Parse(line.Split(':')[1], NumberStyles.Float, CultureInfo.InvariantCulture); + if (characterSpacingValue != 0) + { + // Convert character spacing value. + newCharacterSpacingValue = characterSpacingValue * faceScale / (samplingPointSize * 0.01f); + lines[i] = lines[i].Replace(k_CharacterSpacingProperty + characterSpacingValue, k_CharacterSpacingProperty + newCharacterSpacingValue); + + hasDataFileChanged = true; + } + continue; + } + + // Read word spacing + if (line.Contains(k_WordSpacingProperty)) + { + // Get the character spacing value + wordSpacingValue = float.Parse(line.Split(':')[1], NumberStyles.Float, CultureInfo.InvariantCulture); + if (wordSpacingValue != 0) + { + // Convert character spacing value. + newWordSpacingValue = wordSpacingValue * faceScale / (samplingPointSize * 0.01f); + lines[i] = lines[i].Replace(k_WordSpacingProperty + wordSpacingValue, k_WordSpacingProperty + newWordSpacingValue); + + hasDataFileChanged = true; + } + continue; + } + + // Read line spacing + if (line.Contains(k_LineSpacingProperty)) + { + // Get the value of line spacing value + lineSpacingValue = float.Parse(line.Split(':')[1], NumberStyles.Float, CultureInfo.InvariantCulture); + if (lineSpacingValue != 0) + { + // Convert line spacing value. + newLineSpacingValue = lineSpacingValue / (fontSize * 0.01f) * fontSize / samplingPointSize * faceScale; + lines[i] = lines[i].Replace(k_LineSpacingProperty + lineSpacingValue, k_LineSpacingProperty + newLineSpacingValue); + + hasDataFileChanged = true; + } + continue; + } + + // Read paragraph spacing + if (line.Contains(k_ParagraphSpacingProperty)) + { + // Get the value of line spacing value + paragraphSpacingValue = float.Parse(line.Split(':')[1], NumberStyles.Float, CultureInfo.InvariantCulture); + if (paragraphSpacingValue != 0) + { + // Convert line spacing value. + newParagraphSpacingValue = paragraphSpacingValue / (fontSize * 0.01f) * fontSize / samplingPointSize * faceScale; + lines[i] = lines[i].Replace(k_ParagraphSpacingProperty + paragraphSpacingValue, k_ParagraphSpacingProperty + newParagraphSpacingValue); + + hasDataFileChanged = true; + } + + readingFlag = 4; + continue; + } + } + + // Done reading text component serialized data. + if (readingFlag == 4 && line.Contains("---")) + { + readingFlag = 0; + + string characterSpacingFormat = $"{(characterSpacingValue == 0 ? " " : $"{characterSpacingValue,10:F}{newCharacterSpacingValue,10:F}")}"; + string wordSpacingFormat = $"{(wordSpacingValue == 0 ? " " : $"{wordSpacingValue,10:F}{newWordSpacingValue,10:F}")}"; + string lineSpacingFormat = $"{(lineSpacingValue == 0 ? " " : $"{lineSpacingValue,10:F}{newLineSpacingValue,10:F}")}"; + string paragraphSpacingFormat = $"{(paragraphSpacingValue == 0 ? " " : $"{paragraphSpacingValue,10:F}{newParagraphSpacingValue,10:F}")}"; + + if (characterSpacingValue != 0 || lineSpacingValue != 0) + m_ProjectScanResults += $"{fileRecord.assetFilePath,-100}" + characterSpacingFormat + wordSpacingFormat + lineSpacingFormat + paragraphSpacingFormat + "\n"; + + // Update asset data file + assetDataFile = string.Join("\n", lines); + + newCharacterSpacingValue = 0; + newWordSpacingValue = 0; + newLineSpacingValue = 0; + newParagraphSpacingValue = 0; + } + } + } + + // Check if asset file is a font asset + // if (assetDataFile.Contains(k_FontAssetScriptID)) + // { + // float samplingPointSize; + // float normalSpacing; + // float newNormalSpacing; + // float boldSpacing; + // float newBoldSpacing; + // } + + if (hasDataFileChanged) + { + AssetModificationRecord modifiedAsset; + modifiedAsset.assetFilePath = fileRecord.assetFilePath; + modifiedAsset.assetDataFile = assetDataFile; + + m_ModifiedAssetList.Add(modifiedAsset); + } + } + + /// + /// + /// + private static void ResetScanProcess() + { + m_IsAlreadyScanningProject = false; + m_ScanningCurrentFileName = string.Empty; + m_ProgressPercentage = 0; + m_ScanningCurrentFileIndex = 0; + m_ScanningTotalFiles = 0; + } + + + /// + /// + /// + 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; + } + + + /// + /// Check project Asset Serialization and Source Control modes + /// + private static bool CheckProjectSerializationAndSourceControlModes() + { + // Check Project Asset Serialization and Visible Meta Files mode. + if (EditorSettings.serializationMode != SerializationMode.ForceText || VersionControlSettings.mode != "Visible Meta Files") + { + return false; + } + + return true; + } + } + + public class TMP_ProjectConversionUtility : EditorWindow + { + // Create Project Files GUID Remapping Tool window + [MenuItem("Window/TextMeshPro/Project Files GUID Remapping Tool", false, 2100)] + static void ShowConverterWindow() + { + var window = GetWindow(); + window.titleContent = new GUIContent("Conversion Tool"); + window.Focus(); + } + + private static HashSet m_IgnoreAssetTypes = new HashSet() + { + 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(UnityEngine.TextAsset), + typeof(Texture2D), + typeof(Texture2DArray), + typeof(Texture3D), + typeof(UnityEditorInternal.AssemblyDefinitionAsset), + typeof(UnityEngine.AI.NavMeshData), + typeof(UnityEngine.Tilemaps.Tile), + typeof(UnityEngine.U2D.SpriteAtlas), + typeof(UnityEngine.Video.VideoClip), + }; + + /// + /// + /// + 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 = "Project Scan Results\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 m_ModifiedAssetList = new List(); + + + 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 Scan Project Files 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)); + GUILayout.Label(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 Save Modified Project Files button will update the files in the Project Scan Results listed above. Please make sure that you have created a backup of your project first 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(); + } + + + /// + /// Limits the minimum size of the editor window. + /// + void SetEditorWindowSize() + { + EditorWindow editorWindow = this; + + Vector2 currentWindowSize = editorWindow.minSize; + + editorWindow.minSize = new Vector2(Mathf.Max(640, currentWindowSize.x), Mathf.Max(420, currentWindowSize.y)); + } + + + /// + /// + /// + /// + /// + 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" || fileExtension.ToLower() == ".blend")) + 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(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 = "Phase 1 - Filtering: "; + m_ScanningTotalFiles = guids.Length; + m_ScanningCurrentFileIndex = 0; + + List projectFilesToScan = new List(); + + 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 = "Phase 2 - Scanning: "; + + 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"; + } + } + + + /// + /// + /// + private static void ResetScanProcess() + { + m_IsAlreadyScanningProject = false; + m_ScanningCurrentFileName = string.Empty; + m_ProgressPercentage = 0; + m_ScanningCurrentFileIndex = 0; + m_ScanningTotalFiles = 0; + } + + + /// + /// + /// + 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; + } + + + /// + /// Check project Asset Serialization and Source Control modes + /// + private static bool CheckProjectSerializationAndSourceControlModes() + { + // Check Project Asset Serialization and Visible Meta Files mode. + if (EditorSettings.serializationMode != SerializationMode.ForceText || VersionControlSettings.mode != "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; + } + + /// + /// + /// + [MenuItem("Window/TextMeshPro/Import TMP Essential Resources", false, 2050)] + public static void ImportProjectResourcesMenu() + { + ImportEssentialResources(); + } + + + /// + /// + /// + [MenuItem("Window/TextMeshPro/Import TMP Examples and Extras", false, 2051)] + public static void ImportExamplesContentMenu() + { + ImportExamplesAndExtras(); + } + + + private static void GetVersionInfo() + { + string version = TMP_Settings.version; + Debug.Log("The version of this TextMesh Pro UPM package is (" + version + ")."); + } + + + /// + /// + /// + private static void ImportExamplesAndExtras() + { + string packageFullPath = TMP_EditorUtility.packageFullPath; + + AssetDatabase.ImportPackage(packageFullPath + "/Package Resources/TMP Examples & Extras.unitypackage", true); + } + + private static string k_SettingsFilePath; + private static byte[] k_SettingsBackup; + + /// + /// + /// + private static void ImportEssentialResources() + { + // Check if the TMP Settings asset is already present in the project. + string[] settings = AssetDatabase.FindAssets("t:TMP_Settings"); + + if (settings.Length > 0) + { + // Save assets just in case the TMP Setting were modified before import. + AssetDatabase.SaveAssets(); + + // Copy existing TMP Settings asset to a byte[] + k_SettingsFilePath = AssetDatabase.GUIDToAssetPath(settings[0]); + k_SettingsBackup = File.ReadAllBytes(k_SettingsFilePath); + + RegisterResourceImportCallback(); + } + + string packageFullPath = TMP_EditorUtility.packageFullPath; + + AssetDatabase.ImportPackage(packageFullPath + "/Package Resources/TMP Essential Resources.unitypackage", true); + } + + private static void RegisterResourceImportCallback() + { + AssetDatabase.importPackageCompleted += ImportCallback; + } + + private static void ImportCallback(string packageName) + { + // Restore backup of TMP Settings from byte[] + File.WriteAllBytes(k_SettingsFilePath, k_SettingsBackup); + + AssetDatabase.Refresh(); + + AssetDatabase.importPackageCompleted -= ImportCallback; + } + } +} diff --git a/Assets/TextMesh Pro/Scripts/Editor/TMP_PackageUtilities.cs.meta b/Assets/TextMesh Pro/Scripts/Editor/TMP_PackageUtilities.cs.meta new file mode 100644 index 0000000..b773536 --- /dev/null +++ b/Assets/TextMesh Pro/Scripts/Editor/TMP_PackageUtilities.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 04722392050a47c49b7b361cdbab4617 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TextMesh Pro/Scripts/Editor/TMP_PostBuildProcessHandler.cs b/Assets/TextMesh Pro/Scripts/Editor/TMP_PostBuildProcessHandler.cs new file mode 100644 index 0000000..3c8ee79 --- /dev/null +++ b/Assets/TextMesh Pro/Scripts/Editor/TMP_PostBuildProcessHandler.cs @@ -0,0 +1,29 @@ +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) + { + if (target == BuildTarget.iOS) + { + // Try loading the TMP Settings + TMP_Settings settings = Resources.Load("TMP Settings"); + + if (settings == null || TMP_Settings.enableEmojiSupport == false) + return; + + 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); + } + } + } +} diff --git a/Assets/TextMesh Pro/Scripts/Editor/TMP_PostBuildProcessHandler.cs.meta b/Assets/TextMesh Pro/Scripts/Editor/TMP_PostBuildProcessHandler.cs.meta new file mode 100644 index 0000000..ce47832 --- /dev/null +++ b/Assets/TextMesh Pro/Scripts/Editor/TMP_PostBuildProcessHandler.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 70339e75bf6d99c41beb541646e89717 +timeCreated: 1479886230 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TextMesh Pro/Scripts/Editor/TMP_ProjectTextSettings.cs b/Assets/TextMesh Pro/Scripts/Editor/TMP_ProjectTextSettings.cs new file mode 100644 index 0000000..4f11d68 --- /dev/null +++ b/Assets/TextMesh Pro/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 diff --git a/Assets/TextMesh Pro/Scripts/Editor/TMP_ProjectTextSettings.cs.meta b/Assets/TextMesh Pro/Scripts/Editor/TMP_ProjectTextSettings.cs.meta new file mode 100644 index 0000000..67fb096 --- /dev/null +++ b/Assets/TextMesh Pro/Scripts/Editor/TMP_ProjectTextSettings.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: cc2cdafa31541b5419ed60bdde4c0c6d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TextMesh Pro/Scripts/Editor/TMP_ResourcesLoader.cs b/Assets/TextMesh Pro/Scripts/Editor/TMP_ResourcesLoader.cs new file mode 100644 index 0000000..2252037 --- /dev/null +++ b/Assets/TextMesh Pro/Scripts/Editor/TMP_ResourcesLoader.cs @@ -0,0 +1,159 @@ +using System.Collections; +using UnityEditor; +using UnityEngine; +using UnityEngine.TextCore.Text; + + +namespace TMPro.EditorUtilities +{ + + /*[InitializeOnLoad] + class EssentialResourcesManager + { + private const string s_TMP_API_UpdaterGUID = "bde53ab20f68be04b816a9e44ae1bba2"; + //const string k_EssentialResourcesShaderVersionCheckKey = "TMP.EssentialResources.ShaderVersionCheck"; + + static EssentialResourcesManager() + { + string currentBuildSettings = PlayerSettings.GetScriptingDefineSymbolsForGroup(EditorUserBuildSettings.selectedBuildTargetGroup); + + //Check for and inject TMP_INSTALLED + if (!currentBuildSettings.Contains("TMP_API_UPDATER_ENABLED")) + { + //PlayerSettings.SetScriptingDefineSymbolsForGroup(EditorUserBuildSettings.selectedBuildTargetGroup, currentBuildSettings + ";TMP_PRESENT"); + Debug.Log(currentBuildSettings + " " + EditorUserBuildSettings.selectedBuildTargetGroup); + } + } + + /*static void CheckShaderVersions() + { + // Get path to TMP shader include file. + string assetPath = AssetDatabase.GUIDToAssetPath(s_TMPShaderIncludeGUID); + + if (string.IsNullOrEmpty(assetPath)) + return; + + AssetImporter importer = AssetImporter.GetAtPath(assetPath); + + if (importer != null && string.IsNullOrEmpty(importer.userData)) + { + // Show Shader Import Window + TMP_EditorCoroutine.StartCoroutine(ShowShaderPackageImporterWindow()); + } + + SessionState.SetBool(k_EssentialResourcesShaderVersionCheckKey, true); + } + + static IEnumerator ShowShaderPackageImporterWindow() + { + yield return new WaitForSeconds(5.0f); + + TMP_ShaderPackageImporterWindow.ShowPackageImporterWindow(); + }#1# + }*/ + + /* + [InitializeOnLoad] + class EssentialResourcesManager + { + private const string s_TMPShaderIncludeGUID = "407bc68d299748449bbf7f48ee690f8d"; + const string k_EssentialResourcesShaderVersionCheckKey = "TMP.EssentialResources.ShaderVersionCheck"; + + static EssentialResourcesManager() + { + bool shaderSearched = SessionState.GetBool(k_EssentialResourcesShaderVersionCheckKey, false); + + if (!EditorApplication.isPlayingOrWillChangePlaymode && !shaderSearched) + CheckShaderVersions(); + } + + static void CheckShaderVersions() + { + // Get path to TMP shader include file. + string assetPath = AssetDatabase.GUIDToAssetPath(s_TMPShaderIncludeGUID); + + if (string.IsNullOrEmpty(assetPath)) + return; + + AssetImporter importer = AssetImporter.GetAtPath(assetPath); + + if (importer != null && string.IsNullOrEmpty(importer.userData)) + { + // Show Shader Import Window + TMP_EditorCoroutine.StartCoroutine(ShowShaderPackageImporterWindow()); + } + + SessionState.SetBool(k_EssentialResourcesShaderVersionCheckKey, true); + } + + static IEnumerator ShowShaderPackageImporterWindow() + { + yield return new WaitForSeconds(5.0f); + + TMP_ShaderPackageImporterWindow.ShowPackageImporterWindow(); + } + } + */ + + /* + //[InitializeOnLoad] + class TMP_ResourcesLoader + { + + /// + /// Function to pre-load the TMP Resources + /// + 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/Assets/TextMesh Pro/Scripts/Editor/TMP_ResourcesLoader.cs.meta b/Assets/TextMesh Pro/Scripts/Editor/TMP_ResourcesLoader.cs.meta new file mode 100644 index 0000000..c26adac --- /dev/null +++ b/Assets/TextMesh Pro/Scripts/Editor/TMP_ResourcesLoader.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: fa98276813a22a34d86255568892b322 +timeCreated: 1465441092 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TextMesh Pro/Scripts/Editor/TMP_SDFShaderGUI.cs b/Assets/TextMesh Pro/Scripts/Editor/TMP_SDFShaderGUI.cs new file mode 100644 index 0000000..85f3dc7 --- /dev/null +++ b/Assets/TextMesh Pro/Scripts/Editor/TMP_SDFShaderGUI.cs @@ -0,0 +1,789 @@ +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_Outline2 = true, s_Outline3 = true, s_Underlay = true, s_Lighting = true, s_Glow, s_Bevel, s_Light, s_Bump, s_Env; + + static string[] + s_FaceUVSpeedName = { "_FaceUVSpeed" }, + s_FaceUvSpeedNames = { "_FaceUVSpeedX", "_FaceUVSpeedY" }, + s_OutlineUvSpeedNames = { "_OutlineUVSpeedX", "_OutlineUVSpeedY" }, + s_OutlineUvSpeedName = { "_OutlineUVSpeed" }; + + + 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() + { + bool isSRPMaterial = m_Material.HasProperty(ShaderUtilities.ID_IsoPerimeter); + + s_Face = BeginPanel("Face", s_Face); + if (s_Face) + { + DoFacePanel(); + } + + EndPanel(); + + // Outline panels + if (isSRPMaterial) + { + DoOutlinePanels(); + } + else + { + 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_Outline2Color)) + { + s_Outline2 = BeginPanel("Outline 2", s_OutlineFeature, s_Outline2); + if (s_Outline2) + { + DoOutline2Panel(); + } + + EndPanel(); + } + } + + // Underlay panel + if (m_Material.HasProperty(ShaderUtilities.ID_UnderlayColor)) + { + if (isSRPMaterial) + { + s_Underlay = BeginPanel("Underlay", s_Underlay); + if (s_Underlay) + { + DoUnderlayPanel(); + } + + EndPanel(); + } + else + { + s_Underlay = BeginPanel("Underlay", s_UnderlayFeature, s_Underlay); + if (s_Underlay) + { + DoUnderlayPanel(); + } + + EndPanel(); + } + } + + // Lighting panel + if (m_Material.HasProperty("_SpecularColor")) + { + if (isSRPMaterial) + DrawLightingPanelSRP(); + else + DrawLightingPanelLegacy(); + } + + + 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) + { + if (isSRPMaterial) + DoDebugPanelSRP(); + else + DoDebugPanel(); + } + EndPanel(); + + EditorGUILayout.Space(); + EditorGUILayout.Space(); + + if (isSRPMaterial) + { + m_Editor.RenderQueueField(); + m_Editor.EnableInstancingField(); + m_Editor.DoubleSidedGIField(); + m_Editor.EmissionEnabledProperty(); + } + } + + private void DrawLightingPanelSRP() + { + s_Lighting = BeginPanel("Lighting", s_Lighting); + if (s_Lighting) + { + s_Bevel = BeginPanel("Bevel", s_Bevel); + if (s_Bevel) + { + DoBevelPanelSRP(); + } + EndPanel(); + + s_Light = BeginPanel("Local Lighting", s_Light); + if (s_Light) + { + DoLocalLightingPanel(); + } + EndPanel(); + } + + EndPanel(); + } + + private void DrawLightingPanelLegacy() + { + 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(); + } + + 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 if (m_Material.HasProperty("_FaceUVSpeed")) + { + DoTexture2D("_FaceTex", "Texture", true, s_FaceUVSpeedName); + } + else + { + DoTexture2D("_FaceTex", "Texture", true); + } + } + + if (m_Material.HasProperty("_Softness")) + { + DoSlider("_Softness", "X", new Vector2(0, 1), "Softness"); + } + + if (m_Material.HasProperty("_OutlineSoftness")) + { + DoSlider("_OutlineSoftness", "Softness"); + } + + if (m_Material.HasProperty(ShaderUtilities.ID_FaceDilate)) + { + DoSlider("_FaceDilate", "Dilate"); + if (m_Material.HasProperty(ShaderUtilities.ID_Shininess)) + { + DoSlider("_FaceShininess", "Gloss"); + } + } + + if (m_Material.HasProperty(ShaderUtilities.ID_IsoPerimeter)) + { + DoSlider("_IsoPerimeter", "X", new Vector2(-1, 1), "Dilate"); + } + + 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 if (m_Material.HasProperty("_OutlineUVSpeed")) + { + DoTexture2D("_OutlineTex", "Texture", true, s_OutlineUvSpeedName); + } + else + { + DoTexture2D("_OutlineTex", "Texture", true); + } + } + + DoSlider("_OutlineWidth", "Thickness"); + if (m_Material.HasProperty("_OutlineShininess")) + { + DoSlider("_OutlineShininess", "Gloss"); + } + + EditorGUI.indentLevel -= 1; + EditorGUILayout.Space(); + } + + void DoOutlinePanel(int outlineID, string propertyField, string label) + { + EditorGUI.indentLevel += 1; + DoColor("_OutlineColor" + outlineID, label); + + if (outlineID != 3) + DoOffset("_OutlineOffset" + outlineID, "Offset"); + else + { + if (m_Material.GetFloat(ShaderUtilities.ID_OutlineMode) == 0) + DoOffset("_OutlineOffset" + outlineID, "Offset"); + } + + DoSlider("_Softness", propertyField, new Vector2(0, 1), "Softness"); + DoSlider("_IsoPerimeter", propertyField, new Vector2(-1, 1), "Dilate"); + + if (outlineID == 3) + { + DoToggle("_OutlineMode", "Outline Mode"); + } + + if (m_Material.HasProperty("_OutlineShininess")) + { + //DoSlider("_OutlineShininess", "Gloss"); + } + + EditorGUI.indentLevel -= 1; + EditorGUILayout.Space(); + } + + void DoOutlinePanelWithTexture(int outlineID, string propertyField, string label) + { + EditorGUI.indentLevel += 1; + DoColor("_OutlineColor" + outlineID, label); + if (m_Material.HasProperty(ShaderUtilities.ID_OutlineTex)) + { + if (m_Material.HasProperty("_OutlineUVSpeedX")) + { + DoTexture2D("_OutlineTex", "Texture", true, s_OutlineUvSpeedNames); + } + else if (m_Material.HasProperty("_OutlineUVSpeed")) + { + DoTexture2D("_OutlineTex", "Texture", true, s_OutlineUvSpeedName); + } + else + { + DoTexture2D("_OutlineTex", "Texture", true); + } + } + + DoOffset("_OutlineOffset" + outlineID, "Offset"); + DoSlider("_Softness", propertyField, new Vector2(0, 1), "Softness"); + DoSlider("_IsoPerimeter", propertyField, new Vector2(-1, 1), "Dilate"); + + if (m_Material.HasProperty("_OutlineShininess")) + { + //DoSlider("_OutlineShininess", "Gloss"); + } + + EditorGUI.indentLevel -= 1; + EditorGUILayout.Space(); + } + + void DoOutline2Panel() + { + EditorGUI.indentLevel += 1; + DoColor("_Outline2Color", "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("_Outline2Width", "Thickness"); + //if (m_Material.HasProperty("_OutlineShininess")) + //{ + // DoSlider("_OutlineShininess", "Gloss"); + //} + + EditorGUI.indentLevel -= 1; + EditorGUILayout.Space(); + } + + void DoOutlinePanels() + { + s_Outline = BeginPanel("Outline 1", s_Outline); + if (s_Outline) + DoOutlinePanelWithTexture(1, "Y", "Color"); + + EndPanel(); + + s_Outline2 = BeginPanel("Outline 2", s_Outline2); + if (s_Outline2) + DoOutlinePanel(2, "Z", "Color"); + + EndPanel(); + + s_Outline3 = BeginPanel("Outline 3", s_Outline3); + if (s_Outline3) + DoOutlinePanel(3, "W", "Color"); + + EndPanel(); + } + + void DoUnderlayPanel() + { + EditorGUI.indentLevel += 1; + + if (m_Material.HasProperty(ShaderUtilities.ID_IsoPerimeter)) + { + DoColor("_UnderlayColor", "Color"); + DoSlider("_UnderlayOffset", "X", new Vector2(-1, 1), "Offset X"); + DoSlider("_UnderlayOffset", "Y", new Vector2(-1, 1), "Offset Y"); + DoSlider("_UnderlayDilate", new Vector2(-1, 1), "Dilate"); + DoSlider("_UnderlaySoftness", new Vector2(0, 1), "Softness"); + } + else + { + 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 DoBevelPanelSRP() + { + EditorGUI.indentLevel += 1; + DoPopup("_BevelType", "Type", s_BevelTypeLabels); + DoSlider("_BevelAmount", "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"); + } + } + + if (m_Material.HasProperty(ShaderUtilities.ShaderTag_CullMode)) + { + EditorGUILayout.Space(); + DoPopup("_CullMode", "Cull Mode", s_CullingTypeLabels); + } + + EditorGUILayout.Space(); + + 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 DoDebugPanelSRP() + { + 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"); + } + } + */ + if (m_Material.HasProperty(ShaderUtilities.ShaderTag_CullMode)) + { + EditorGUILayout.Space(); + DoPopup("_CullMode", "Cull Mode", s_CullingTypeLabels); + } + + EditorGUILayout.Space(); + /* + 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(); + 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/Assets/TextMesh Pro/Scripts/Editor/TMP_SDFShaderGUI.cs.meta b/Assets/TextMesh Pro/Scripts/Editor/TMP_SDFShaderGUI.cs.meta new file mode 100644 index 0000000..fc8a218 --- /dev/null +++ b/Assets/TextMesh Pro/Scripts/Editor/TMP_SDFShaderGUI.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: fe0610393aaf569459bdbeac92ecb1b0 +timeCreated: 1469844718 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TextMesh Pro/Scripts/Editor/TMP_SerializedPropertyHolder.cs b/Assets/TextMesh Pro/Scripts/Editor/TMP_SerializedPropertyHolder.cs new file mode 100644 index 0000000..bcff6dd --- /dev/null +++ b/Assets/TextMesh Pro/Scripts/Editor/TMP_SerializedPropertyHolder.cs @@ -0,0 +1,15 @@ +using UnityEngine; +using UnityEngine.TextCore.Text; + + +namespace TMPro +{ + class TMP_SerializedPropertyHolder : ScriptableObject + { + public FontAsset fontAsset; + public uint firstCharacter; + public uint secondCharacter; + + public TMP_GlyphPairAdjustmentRecord glyphPairAdjustmentRecord = new TMP_GlyphPairAdjustmentRecord(new TMP_GlyphAdjustmentRecord(), new TMP_GlyphAdjustmentRecord()); + } +} diff --git a/Assets/TextMesh Pro/Scripts/Editor/TMP_SerializedPropertyHolder.cs.meta b/Assets/TextMesh Pro/Scripts/Editor/TMP_SerializedPropertyHolder.cs.meta new file mode 100644 index 0000000..e472a8e --- /dev/null +++ b/Assets/TextMesh Pro/Scripts/Editor/TMP_SerializedPropertyHolder.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6cb70951b63cb5a47b9a3db630ee8c3b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TextMesh Pro/Scripts/Editor/TMP_SettingsEditor.cs b/Assets/TextMesh Pro/Scripts/Editor/TMP_SettingsEditor.cs new file mode 100644 index 0000000..79856f4 --- /dev/null +++ b/Assets/TextMesh Pro/Scripts/Editor/TMP_SettingsEditor.cs @@ -0,0 +1,410 @@ +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.TextCore.Text; +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 hideSubTextObjectsPresetLabel = new GUIContent("Hide Sub Text Objects", "Determines if sub text objects will be hidden in the scene hierarchy. Property change will only take effect after entering or existing play mode."); + + 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 isTextObjectScaleStaticLabel = new GUIContent("Is Object Scale Static", "Disables calling InternalUpdate() when enabled. This can improve performance when text object scale is static."); + + 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 textWrappingModeLabel = new GUIContent("Text Wrapping Mode"); + 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 dynamicAtlasTextureGroup = new GUIContent("Dynamic Atlas Texture Group"); + + public static readonly GUIContent missingGlyphLabel = new GUIContent("Missing Character Unicode", "The character to be displayed when the requested character is not found in any font asset or fallbacks."); + public static readonly GUIContent clearDynamicDataOnBuildLabel = new GUIContent("Clear Dynamic Data On Build", "Determines if the \"Clear Dynamic Data on Build\" property will be set to true or false on newly created dynamic font assets."); + 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 tag when no Sprite Asset is specified."); + public static readonly GUIContent missingSpriteCharacterUnicodeLabel = new GUIContent("Missing Sprite Unicode", "The unicode value for the sprite character to be displayed when the requested sprite character is not found in any sprite assets or fallbacks."); + public static readonly GUIContent enableEmojiSupportLabel = new GUIContent("iOS Emoji Support", "Enables Emoji support for Touch Screen Keyboards on target devices."); + //public static readonly GUIContent spriteRelativeScale = new GUIContent("Relative Scaling", "Determines if the sprites will be scaled relative to the primary font asset assigned to the text object or relative to the current font asset."); + + 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 styleSheetResourcePathLabel = new GUIContent("Path: Resources/", "The relative path to a Resources folder where the Style Sheets are located.\nExample \"Style Sheets/\""); + + 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."); + public static readonly GUIContent koreanSpecificRules = new GUIContent("Korean Language Options"); + } + + 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_PropIsTextObjectScaleStatic; + + SerializedProperty m_PropSpriteAsset; + SerializedProperty m_PropMissingSpriteCharacterUnicode; + //SerializedProperty m_PropSpriteRelativeScaling; + SerializedProperty m_PropEnableEmojiSupport; + SerializedProperty m_PropSpriteAssetPath; + + + SerializedProperty m_PropStyleSheet; + SerializedProperty m_PropStyleSheetsResourcePath; + ReorderableList m_GlobalFallbackFontAssetList; + + SerializedProperty m_PropColorGradientPresetsPath; + + SerializedProperty m_PropMatchMaterialPreset; + SerializedProperty m_PropHideSubTextObjects; + SerializedProperty m_PropTextWrappingMode; + SerializedProperty m_PropKerning; + SerializedProperty m_PropExtraPadding; + SerializedProperty m_PropTintAllSprites; + SerializedProperty m_PropParseEscapeCharacters; + SerializedProperty m_PropMissingGlyphCharacter; + SerializedProperty m_PropClearDynamicDataOnBuild; + + //SerializedProperty m_DynamicAtlasTextureManager; + SerializedProperty m_GetFontFeaturesAtRuntime; + + SerializedProperty m_PropWarningsDisabled; + + SerializedProperty m_PropLeadingCharacters; + SerializedProperty m_PropFollowingCharacters; + SerializedProperty m_PropUseModernHangulLineBreakingRules; + + private const string k_UndoRedo = "UndoRedoPerformed"; + private bool m_IsFallbackGlyphCacheDirty; + + 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_PropIsTextObjectScaleStatic = serializedObject.FindProperty("m_IsTextObjectScaleStatic"); + + m_PropSpriteAsset = serializedObject.FindProperty("m_defaultSpriteAsset"); + m_PropMissingSpriteCharacterUnicode = serializedObject.FindProperty("m_MissingCharacterSpriteUnicode"); + //m_PropSpriteRelativeScaling = serializedObject.FindProperty("m_SpriteRelativeScaling"); + m_PropEnableEmojiSupport = serializedObject.FindProperty("m_enableEmojiSupport"); + m_PropSpriteAssetPath = serializedObject.FindProperty("m_defaultSpriteAssetPath"); + + m_PropStyleSheet = serializedObject.FindProperty("m_defaultStyleSheet"); + m_PropStyleSheetsResourcePath = serializedObject.FindProperty("m_StyleSheetsResourcePath"); + + + m_PropColorGradientPresetsPath = serializedObject.FindProperty("m_defaultColorGradientPresetsPath"); + + m_GlobalFallbackFontAssetList = new ReorderableList(serializedObject, serializedObject.FindProperty("m_fallbackFontAssets"), true, true, true, true); + + m_GlobalFallbackFontAssetList.drawHeaderCallback = rect => + { + EditorGUI.LabelField(rect, Styles.fallbackFontAssetsListLabel); + }; + + m_GlobalFallbackFontAssetList.drawElementCallback = (rect, index, isActive, isFocused) => + { + var element = m_GlobalFallbackFontAssetList.serializedProperty.GetArrayElementAtIndex(index); + rect.y += 2; + EditorGUI.PropertyField(new Rect(rect.x, rect.y, rect.width, EditorGUIUtility.singleLineHeight), element, GUIContent.none); + }; + + m_GlobalFallbackFontAssetList.onChangedCallback = itemList => + { + m_IsFallbackGlyphCacheDirty = true; + }; + + m_PropMatchMaterialPreset = serializedObject.FindProperty("m_matchMaterialPreset"); + m_PropHideSubTextObjects = serializedObject.FindProperty("m_HideSubTextObjects"); + + m_PropTextWrappingMode = serializedObject.FindProperty("m_TextWrappingMode"); + 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_PropClearDynamicDataOnBuild = serializedObject.FindProperty("m_ClearDynamicDataOnBuild"); + m_PropWarningsDisabled = serializedObject.FindProperty("m_warningsDisabled"); + + //m_DynamicAtlasTextureManager = serializedObject.FindProperty("m_DynamicAtlasTextureGroup"); + m_GetFontFeaturesAtRuntime = serializedObject.FindProperty("m_GetFontFeaturesAtRuntime"); + + m_PropLeadingCharacters = serializedObject.FindProperty("m_leadingCharacters"); + m_PropFollowingCharacters = serializedObject.FindProperty("m_followingCharacters"); + m_PropUseModernHangulLineBreakingRules = serializedObject.FindProperty("m_UseModernHangulLineBreakingRules"); + } + + public override void OnInspectorGUI() + { + serializedObject.Update(); + string evt_cmd = Event.current.commandName; + m_IsFallbackGlyphCacheDirty = false; + + 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; + EditorGUI.BeginChangeCheck(); + EditorGUILayout.PropertyField(m_PropFontAsset, Styles.defaultFontAssetLabel); + if (EditorGUI.EndChangeCheck()) + m_IsFallbackGlyphCacheDirty = true; + + 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); + EditorGUI.BeginChangeCheck(); + m_GlobalFallbackFontAssetList.DoLayoutList(); + if (EditorGUI.EndChangeCheck()) + m_IsFallbackGlyphCacheDirty = true; + + GUILayout.Label(Styles.fallbackMaterialSettingsLabel, EditorStyles.boldLabel); + EditorGUI.indentLevel = 1; + EditorGUILayout.PropertyField(m_PropMatchMaterialPreset, Styles.matchMaterialPresetLabel); + EditorGUILayout.PropertyField(m_PropHideSubTextObjects, Styles.hideSubTextObjectsPresetLabel); + 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_PropClearDynamicDataOnBuild, Styles.clearDynamicDataOnBuildLabel); + EditorGUILayout.PropertyField(m_PropWarningsDisabled, Styles.disableWarningsLabel); + //EditorGUILayout.PropertyField(m_DynamicAtlasTextureManager, Styles.dynamicAtlasTextureManager); + 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); + EditorGUILayout.PropertyField(m_PropIsTextObjectScaleStatic, Styles.isTextObjectScaleStaticLabel); + 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_PropTextWrappingMode, Styles.textWrappingModeLabel); + 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; + EditorGUI.BeginChangeCheck(); + EditorGUILayout.PropertyField(m_PropSpriteAsset, Styles.defaultSpriteAssetLabel); + if (EditorGUI.EndChangeCheck()) + m_IsFallbackGlyphCacheDirty = true; + + EditorGUILayout.PropertyField(m_PropMissingSpriteCharacterUnicode, Styles.missingSpriteCharacterUnicodeLabel); + EditorGUILayout.PropertyField(m_PropEnableEmojiSupport, Styles.enableEmojiSupportLabel); + //EditorGUILayout.PropertyField(m_PropSpriteRelativeScaling, Styles.spriteRelativeScale); + 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(); + + UnityEngine.TextCore.Text.TextStyleSheet styleSheet = m_PropStyleSheet.objectReferenceValue as UnityEngine.TextCore.Text.TextStyleSheet; + if (styleSheet != null) + styleSheet.RefreshStyles(); + } + EditorGUILayout.PropertyField(m_PropStyleSheetsResourcePath, Styles.styleSheetResourcePathLabel); + 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); + + EditorGUILayout.Space(); + GUILayout.Label(Styles.koreanSpecificRules, EditorStyles.boldLabel); + EditorGUILayout.PropertyField(m_PropUseModernHangulLineBreakingRules, new GUIContent("Use Modern Line Breaking", "Determines if traditional or modern line breaking rules will be used to control line breaking. Traditional line breaking rules use the Leading and Following Character rules whereas Modern uses spaces for line breaking.")); + + EditorGUI.indentLevel = 0; + + EditorGUILayout.Space(); + EditorGUILayout.EndVertical(); + + if (m_IsFallbackGlyphCacheDirty || evt_cmd == k_UndoRedo) + TextResourceManager.RebuildFontAssetCache(); + + if (serializedObject.ApplyModifiedProperties() || evt_cmd == k_UndoRedo) + { + EditorUtility.SetDirty(target); + TextEventManager.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"); + } + + [SettingsProviderGroup] + static SettingsProvider[] CreateTMPSettingsProvider() + { + var providers = new List { new TMP_ResourceImporterProvider() }; + + if (GetTMPSettings() != null) + { + var provider = new AssetSettingsProvider("Project/TextMesh Pro/Settings", GetTMPSettings); + provider.PopulateSearchKeywordsFromGUIContentProperties(); + providers.Add(provider); + } + + return providers.ToArray(); + } + } +#endif +} diff --git a/Assets/TextMesh Pro/Scripts/Editor/TMP_SettingsEditor.cs.meta b/Assets/TextMesh Pro/Scripts/Editor/TMP_SettingsEditor.cs.meta new file mode 100644 index 0000000..89e72ed --- /dev/null +++ b/Assets/TextMesh Pro/Scripts/Editor/TMP_SettingsEditor.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: e5265d75dc6716c48a9b42547608c44e +timeCreated: 1436658550 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TextMesh Pro/Scripts/Editor/TMP_SpriteAssetImporter.cs b/Assets/TextMesh Pro/Scripts/Editor/TMP_SpriteAssetImporter.cs new file mode 100644 index 0000000..7145339 --- /dev/null +++ b/Assets/TextMesh Pro/Scripts/Editor/TMP_SpriteAssetImporter.cs @@ -0,0 +1,19 @@ +using UnityEngine; +using UnityEditor; +using UnityEditor.TextCore.Text; + + +namespace TMPro +{ + internal class TMP_SpriteAssetImporter : EditorWindow + { + // Create Sprite Asset Editor Window + [MenuItem("Window/TextMeshPro/Sprite Importer", false, 2026)] + public static void ShowSpriteImporterWindow() + { + var window = GetWindow(); + window.titleContent = new GUIContent("Sprite Importer"); + window.Focus(); + } + } +} diff --git a/Assets/TextMesh Pro/Scripts/Editor/TMP_SpriteAssetImporter.cs.meta b/Assets/TextMesh Pro/Scripts/Editor/TMP_SpriteAssetImporter.cs.meta new file mode 100644 index 0000000..2c191b2 --- /dev/null +++ b/Assets/TextMesh Pro/Scripts/Editor/TMP_SpriteAssetImporter.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 42c628ae579d4334d9dc7899c6f288c2 +timeCreated: 1480023525 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TextMesh Pro/Scripts/Editor/TMP_SpriteAssetMenu.cs b/Assets/TextMesh Pro/Scripts/Editor/TMP_SpriteAssetMenu.cs new file mode 100644 index 0000000..2b24856 --- /dev/null +++ b/Assets/TextMesh Pro/Scripts/Editor/TMP_SpriteAssetMenu.cs @@ -0,0 +1,215 @@ +using System.Collections.Generic; +using System.Globalization; +using System.IO; +using System.Linq; +using UnityEngine; +using UnityEngine.TextCore; +using UnityEngine.TextCore.Text; +using UnityEngine.U2D; +using UnityEditor; + + +namespace TMPro.EditorUtilities +{ + public static class TMP_SpriteAssetMenu + { + [MenuItem("Assets/Create/TextMeshPro/Sprite Asset", false, 150)] + static void CreateSpriteAsset() + { + Object[] targets = Selection.objects; + + if (targets == null) + { + Debug.LogWarning("A Sprite Texture must first be selected in order to create a Sprite Asset."); + return; + } + + // Make sure TMP Essential Resources have been imported in the user project. + if (TMP_Settings.instance == null) + { + Debug.Log("Unable to create sprite asset. Please import the TMP Essential Resources."); + + // Show Window to Import TMP Essential Resources + return; + } + + for (int i = 0; i < targets.Length; i++) + { + Object target = targets[i]; + + // Make sure the selection is a font file + if (target == null || target.GetType() != typeof(Texture2D)) + { + Debug.LogWarning("Selected Object [" + target.name + "] is not a Sprite Texture. A Sprite Texture must be selected in order to create a Sprite Asset.", target); + continue; + } + + CreateSpriteAssetFromSelectedObject(target); + } + } + + + static void CreateSpriteAssetFromSelectedObject(Object target) + { + // Get the path to the selected asset. + string filePathWithName = AssetDatabase.GetAssetPath(target); + string fileNameWithExtension = Path.GetFileName(filePathWithName); + string fileNameWithoutExtension = Path.GetFileNameWithoutExtension(filePathWithName); + string filePath = filePathWithName.Replace(fileNameWithExtension, ""); + string uniquePath = AssetDatabase.GenerateUniqueAssetPath(filePath + fileNameWithoutExtension + ".asset"); + + // Create new Sprite Asset + SpriteAsset spriteAsset = ScriptableObject.CreateInstance(); + AssetDatabase.CreateAsset(spriteAsset, uniquePath); + + spriteAsset.version = "1.1.0"; + + // Compute the hash code for the sprite asset. + spriteAsset.hashCode = TMP_TextUtilities.GetSimpleHashCode(spriteAsset.name); + + List spriteGlyphTable = new List(); + List spriteCharacterTable = new List(); + + if (target.GetType() == typeof(Texture2D)) + { + Texture2D sourceTex = target as Texture2D; + + // Assign new Sprite Sheet texture to the Sprite Asset. + spriteAsset.spriteSheet = sourceTex; + + PopulateSpriteTables(sourceTex, ref spriteCharacterTable, ref spriteGlyphTable); + + spriteAsset.spriteCharacterTable = spriteCharacterTable; + spriteAsset.spriteGlyphTable = spriteGlyphTable; + + // Add new default material for sprite asset. + AddDefaultMaterial(spriteAsset); + } + else if (target.GetType() == typeof(SpriteAtlas)) + { + //SpriteAtlas spriteAtlas = target as SpriteAtlas; + + //PopulateSpriteTables(spriteAtlas, ref spriteCharacterTable, ref spriteGlyphTable); + + //spriteAsset.spriteCharacterTable = spriteCharacterTable; + //spriteAsset.spriteGlyphTable = spriteGlyphTable; + + //spriteAsset.spriteSheet = spriteGlyphTable[0].sprite.texture; + + //// 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(); + } + + + static void PopulateSpriteTables(Texture source, ref List spriteCharacterTable, ref List 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]; + + SpriteGlyph spriteGlyph = new 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); + + SpriteCharacter spriteCharacter = new SpriteCharacter(0xFFFE, spriteGlyph); + + // Special handling for .notdef sprite name. + string fileNameToLowerInvariant = sprite.name.ToLowerInvariant(); + if (fileNameToLowerInvariant == ".notdef" || fileNameToLowerInvariant == "notdef") + { + spriteCharacter.unicode = 0; + spriteCharacter.name = fileNameToLowerInvariant; + } + else + { + if (!string.IsNullOrEmpty(sprite.name) && sprite.name.Length > 2 && sprite.name[0] == '0' && (sprite.name[1] == 'x' || sprite.name[1] == 'X')) + { + spriteCharacter.unicode = (uint)TMP_TextUtilities.StringHexToInt(sprite.name.Remove(0, 2)); + } + spriteCharacter.name = sprite.name; + } + + spriteCharacter.scale = 1.0f; + + spriteCharacterTable.Add(spriteCharacter); + } + } + + + static void PopulateSpriteTables(SpriteAtlas spriteAtlas, ref List spriteCharacterTable, ref List spriteGlyphTable) + { + // Get number of sprites contained in the sprite atlas. + int spriteCount = spriteAtlas.spriteCount; + Sprite[] sprites = new Sprite[spriteCount]; + + // Get all the sprites + spriteAtlas.GetSprites(sprites); + + for (int i = 0; i < sprites.Length; i++) + { + Sprite sprite = sprites[i]; + + SpriteGlyph spriteGlyph = new SpriteGlyph(); + spriteGlyph.index = (uint)i; + spriteGlyph.metrics = new GlyphMetrics(sprite.textureRect.width, sprite.textureRect.height, -sprite.pivot.x, sprite.textureRect.height - sprite.pivot.y, sprite.textureRect.width); + spriteGlyph.glyphRect = new GlyphRect(sprite.textureRect); + spriteGlyph.scale = 1.0f; + spriteGlyph.sprite = sprite; + + spriteGlyphTable.Add(spriteGlyph); + + SpriteCharacter spriteCharacter = new SpriteCharacter(0xFFFE, spriteGlyph); + spriteCharacter.name = sprite.name; + spriteCharacter.scale = 1.0f; + + spriteCharacterTable.Add(spriteCharacter); + } + } + + + /// + /// Create and add new default material to sprite asset. + /// + /// + static void AddDefaultMaterial(SpriteAsset spriteAsset) + { + Shader shader = Shader.Find("TextMeshPro/Sprite"); + Material material = new Material(shader); + material.SetTexture(ShaderUtilities.ID_MainTex, spriteAsset.spriteSheet); + + spriteAsset.material = material; + material.name = spriteAsset.name + " Material"; + AssetDatabase.AddObjectToAsset(material, spriteAsset); + } + } +} diff --git a/Assets/TextMesh Pro/Scripts/Editor/TMP_SpriteAssetMenu.cs.meta b/Assets/TextMesh Pro/Scripts/Editor/TMP_SpriteAssetMenu.cs.meta new file mode 100644 index 0000000..7570039 --- /dev/null +++ b/Assets/TextMesh Pro/Scripts/Editor/TMP_SpriteAssetMenu.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 1482c8f1088021247b8288de150cd286 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TextMesh Pro/Scripts/Editor/TMP_StyleAssetMenu.cs b/Assets/TextMesh Pro/Scripts/Editor/TMP_StyleAssetMenu.cs new file mode 100644 index 0000000..c29ed39 --- /dev/null +++ b/Assets/TextMesh Pro/Scripts/Editor/TMP_StyleAssetMenu.cs @@ -0,0 +1,54 @@ +using System.IO; +using UnityEngine; +using UnityEngine.TextCore.Text; +using UnityEditor; + + +namespace TMPro.EditorUtilities +{ + + public static class TMP_StyleAssetMenu + { + + [MenuItem("Assets/Create/TextMeshPro/Style Sheet", false, 200)] + internal 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 + "/Text StyleSheet.asset"); + + //// Create new Style Sheet Asset. + TextStyleSheet styleSheet = ScriptableObject.CreateInstance(); + + // Create Normal default style + TextStyle style = new TextStyle("Normal", string.Empty, string.Empty); + styleSheet.styles.Add(style); + + AssetDatabase.CreateAsset(styleSheet, filePathWithName); + + EditorUtility.SetDirty(styleSheet); + + AssetDatabase.SaveAssets(); + + EditorUtility.FocusProjectWindow(); + EditorGUIUtility.PingObject(styleSheet); + } + } +} diff --git a/Assets/TextMesh Pro/Scripts/Editor/TMP_StyleAssetMenu.cs.meta b/Assets/TextMesh Pro/Scripts/Editor/TMP_StyleAssetMenu.cs.meta new file mode 100644 index 0000000..2c73a88 --- /dev/null +++ b/Assets/TextMesh Pro/Scripts/Editor/TMP_StyleAssetMenu.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 5fdf1a778783f1143abbbcb77d7ba724 +timeCreated: 1432690168 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TextMesh Pro/Scripts/Editor/TMP_SubMeshUI_Editor.cs b/Assets/TextMesh Pro/Scripts/Editor/TMP_SubMeshUI_Editor.cs new file mode 100644 index 0000000..f3228b8 --- /dev/null +++ b/Assets/TextMesh Pro/Scripts/Editor/TMP_SubMeshUI_Editor.cs @@ -0,0 +1,104 @@ +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/Assets/TextMesh Pro/Scripts/Editor/TMP_SubMeshUI_Editor.cs.meta b/Assets/TextMesh Pro/Scripts/Editor/TMP_SubMeshUI_Editor.cs.meta new file mode 100644 index 0000000..c857559 --- /dev/null +++ b/Assets/TextMesh Pro/Scripts/Editor/TMP_SubMeshUI_Editor.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: b6e27efdddf82ea45bcea289192e8e3a +timeCreated: 1452757501 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TextMesh Pro/Scripts/Editor/TMP_SubMesh_Editor.cs b/Assets/TextMesh Pro/Scripts/Editor/TMP_SubMesh_Editor.cs new file mode 100644 index 0000000..b3ec8ae --- /dev/null +++ b/Assets/TextMesh Pro/Scripts/Editor/TMP_SubMesh_Editor.cs @@ -0,0 +1,71 @@ +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; + + private string[] m_SortingLayerNames; + + 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; + + m_SortingLayerNames = SortingLayerHelper.sortingLayerNames; + } + + + public override void OnInspectorGUI() + { + EditorGUI.indentLevel = 0; + + GUI.enabled = false; + EditorGUILayout.PropertyField(fontAsset_prop); + EditorGUILayout.PropertyField(spriteAsset_prop); + GUI.enabled = true; + + EditorGUI.BeginChangeCheck(); + + // Look up the layer name using the current layer ID + string oldName = SortingLayer.IDToName(m_Renderer.sortingLayerID); + + // Use the name to look up our array index into the names list + int oldLayerIndex = System.Array.IndexOf(m_SortingLayerNames, oldName); + + // Show the pop-up for the names + int newLayerIndex = EditorGUILayout.Popup("Sorting Layer", oldLayerIndex, m_SortingLayerNames); + + // If the index changes, look up the ID for the new index to store as the new ID + if (newLayerIndex != oldLayerIndex) + m_Renderer.sortingLayerID = SortingLayer.NameToID(m_SortingLayerNames[newLayerIndex]); + + // Expose the manual sorting order + int newSortingLayerOrder = EditorGUILayout.IntField("Order in Layer", m_Renderer.sortingOrder); + if (newSortingLayerOrder != m_Renderer.sortingOrder) + m_Renderer.sortingOrder = newSortingLayerOrder; + + } + } +} diff --git a/Assets/TextMesh Pro/Scripts/Editor/TMP_SubMesh_Editor.cs.meta b/Assets/TextMesh Pro/Scripts/Editor/TMP_SubMesh_Editor.cs.meta new file mode 100644 index 0000000..c64ec5f --- /dev/null +++ b/Assets/TextMesh Pro/Scripts/Editor/TMP_SubMesh_Editor.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 011b7ef66d3d30d40871bc6b61410f78 +timeCreated: 1456189048 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TextMesh Pro/Scripts/Editor/TMP_UIStyleManager.cs b/Assets/TextMesh Pro/Scripts/Editor/TMP_UIStyleManager.cs new file mode 100644 index 0000000..ee2a59b --- /dev/null +++ b/Assets/TextMesh Pro/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/Assets/TextMesh Pro/Scripts/Editor/TMP_UIStyleManager.cs.meta b/Assets/TextMesh Pro/Scripts/Editor/TMP_UIStyleManager.cs.meta new file mode 100644 index 0000000..7db1b2d --- /dev/null +++ b/Assets/TextMesh Pro/Scripts/Editor/TMP_UIStyleManager.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 8733984551d9f6a4e887affa0a8122ae +timeCreated: 1426454127 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TextMesh Pro/Scripts/Editor/TMPro_ContextMenus.cs b/Assets/TextMesh Pro/Scripts/Editor/TMPro_ContextMenus.cs new file mode 100644 index 0000000..083441a --- /dev/null +++ b/Assets/TextMesh Pro/Scripts/Editor/TMPro_ContextMenus.cs @@ -0,0 +1,404 @@ +using System.IO; +using UnityEngine; +using UnityEngine.TextCore.Text; +using UnityEditor; + + +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. + #if !TEXTCORE_1_0_OR_NEWER + [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); + } + #endif + + + // 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 persistent asset."); + return; + } + + string assetPath = AssetDatabase.GetAssetPath(source_Mat).Split('.')[0]; + + if (assetPath.IndexOf("Assets/", System.StringComparison.InvariantCultureIgnoreCase) == -1) + { + Debug.LogWarning("Material Preset cannot be created from a material that is located outside the project."); + return; + } + + 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")); + + GameObject[] selectedObjects = Selection.gameObjects; + + // Assign new Material Preset to selected text objects. + for (int i = 0; i < selectedObjects.Length; i++) + { + TMP_Text textObject = selectedObjects[i].GetComponent(); + + if (textObject != null) + { + textObject.fontSharedMaterial = duplicate; + } + else + { + TMP_SubMesh subMeshObject = selectedObjects[i].GetComponent(); + + if (subMeshObject != null) + subMeshObject.sharedMaterial = duplicate; + else + { + TMP_SubMeshUI subMeshUIObject = selectedObjects[i].GetComponent(); + + if (subMeshUIObject != null) + subMeshUIObject.sharedMaterial = duplicate; + } + } + } + + // Ping newly created Material Preset. + EditorUtility.FocusProjectWindow(); + EditorGUIUtility.PingObject(duplicate); + } + + + // COPY MATERIAL PROPERTIES + #if !TEXTCORE_1_0_OR_NEWER + [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().GetMaterial(); + } + + m_copiedProperties = new Material(mat); + + m_copiedProperties.shaderKeywords = mat.shaderKeywords; + + m_copiedProperties.hideFlags = HideFlags.DontSave; + } + + + // PASTE MATERIAL PROPERTIES + [MenuItem("CONTEXT/Material/Paste Material Properties", true)] + static bool PasteMaterialPropertiesValidate(MenuCommand command) + { + if (m_copiedProperties == null) + return false; + + return AssetDatabase.IsOpenForEdit(command.context); + } + + [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().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", true, 2100)] + static bool ResetSettingsValidate(MenuCommand command) + { + return AssetDatabase.IsOpenForEdit(command.context); + } + + [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().GetMaterial(); + } + + Undo.RecordObject(mat, "Reset Material"); + + ShaderUtilities.GetShaderPropertyIDs(); // Make sure we have valid Property IDs + if (mat.HasProperty(ShaderUtilities.ID_GradientScale)) + { + bool isSRPShader = mat.HasProperty(ShaderUtilities.ID_IsoPerimeter); + + // Copy unique properties of the SDF Material + var texture = mat.GetTexture(ShaderUtilities.ID_MainTex); + var gradientScale = mat.GetFloat(ShaderUtilities.ID_GradientScale); + + float texWidth = 0, texHeight = 0; + float normalWeight = 0, boldWeight = 0; + + if (!isSRPShader) + { + texWidth = mat.GetFloat(ShaderUtilities.ID_TextureWidth); + texHeight = mat.GetFloat(ShaderUtilities.ID_TextureHeight); + normalWeight = mat.GetFloat(ShaderUtilities.ID_WeightNormal); + boldWeight = mat.GetFloat(ShaderUtilities.ID_WeightBold); + } + + 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); + } + + // 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); + + if (!isSRPShader) + { + mat.SetFloat(ShaderUtilities.ID_TextureWidth, texWidth); + mat.SetFloat(ShaderUtilities.ID_TextureHeight, texHeight); + mat.SetFloat(ShaderUtilities.ID_WeightNormal, normalWeight); + mat.SetFloat(ShaderUtilities.ID_WeightBold, boldWeight); + } + + if (mat.HasProperty(ShaderUtilities.ID_StencilID)) + { + mat.SetFloat(ShaderUtilities.ID_StencilID, stencilId); + mat.SetFloat(ShaderUtilities.ID_StencilComp, stencilComp); + } + } + 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", true, 2001)] + static bool PasteAtlasValidate(MenuCommand command) + { + if (m_copiedAtlasProperties == null && m_copiedTexture == null) + return false; + + return AssetDatabase.IsOpenForEdit(command.context); + } + + [MenuItem("CONTEXT/Material/Paste Atlas", false, 2001)] + static void PasteAtlas(MenuCommand command) + { + Material mat = command.context as Material; + + if (mat == null) + return; + + if (m_copiedAtlasProperties != null) + { + Undo.RecordObject(mat, "Paste Texture"); + + ShaderUtilities.GetShaderPropertyIDs(); // Make sure we have valid Property IDs + + if (m_copiedAtlasProperties.HasProperty(ShaderUtilities.ID_MainTex)) + mat.SetTexture(ShaderUtilities.ID_MainTex, m_copiedAtlasProperties.GetTexture(ShaderUtilities.ID_MainTex)); + + if (m_copiedAtlasProperties.HasProperty(ShaderUtilities.ID_GradientScale)) + { + 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); + } + } + #endif + + /* + // 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) + { + FontAsset font = command.context as 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); + } + */ + + /* + /// + /// + /// + /// + [MenuItem("CONTEXT/TMP_FontAsset/Update Atlas Texture...", false, 2000)] + static void RegenerateFontAsset(MenuCommand command) + { + FontAsset fontAsset = command.context as FontAsset; + + if (fontAsset != null) + { + TMPro_FontAssetCreatorWindow.ShowFontAtlasCreatorWindow(fontAsset); + } + } + + + /// + /// Clear Dynamic Font Asset data such as glyph, character and font features. + /// + /// + [MenuItem("CONTEXT/TMP_FontAsset/Reset", true, 100)] + static bool ClearFontAssetDataValidate(MenuCommand command) + { + return AssetDatabase.IsOpenForEdit(command.context); + } + + [MenuItem("CONTEXT/TMP_FontAsset/Reset", false, 100)] + static void ClearFontAssetData(MenuCommand command) + { + FontAsset fontAsset = command.context as FontAsset; + + if (fontAsset == null) + return; + + if (Selection.activeObject != fontAsset) + Selection.activeObject = fontAsset; + + fontAsset.ClearFontAssetData(true); + + TextResourceManager.RebuildFontAssetCache(); + + TextEventManager.ON_FONT_PROPERTY_CHANGED(true, fontAsset); + } + */ + + /* + [MenuItem("CONTEXT/TrueTypeFontImporter/Create Font Asset...", false, 200)] + static void CreateFontAsset(MenuCommand command) + { + TrueTypeFontImporter importer = command.context as TrueTypeFontImporter; + + if (importer != null) + { + Font sourceFontFile = AssetDatabase.LoadAssetAtPath(importer.assetPath); + + if (sourceFontFile) + TMPro_FontAssetCreatorWindow.ShowFontAtlasCreatorWindow(sourceFontFile); + } + } + */ + } +} diff --git a/Assets/TextMesh Pro/Scripts/Editor/TMPro_ContextMenus.cs.meta b/Assets/TextMesh Pro/Scripts/Editor/TMPro_ContextMenus.cs.meta new file mode 100644 index 0000000..e3c39b5 --- /dev/null +++ b/Assets/TextMesh Pro/Scripts/Editor/TMPro_ContextMenus.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 15f9ccf306ee7834a83366dd92746abc +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TextMesh Pro/Scripts/Editor/TMPro_CreateObjectMenu.cs b/Assets/TextMesh Pro/Scripts/Editor/TMPro_CreateObjectMenu.cs new file mode 100644 index 0000000..7d04767 --- /dev/null +++ b/Assets/TextMesh Pro/Scripts/Editor/TMPro_CreateObjectMenu.cs @@ -0,0 +1,417 @@ +using UnityEngine; +using UnityEditor; +using UnityEditor.Presets; +using UnityEditor.SceneManagement; +using UnityEditor.Experimental.SceneManagement; +using UnityEngine.SceneManagement; +using UnityEngine.UI; +using UnityEngine.EventSystems; + + +namespace TMPro.EditorUtilities +{ + public static class TMPro_CreateObjectMenu + { + + /// + /// Create a TextMeshPro object that works with the Mesh Renderer + /// + /// + [MenuItem("GameObject/3D Object/Text - TextMeshPro", false, 30)] + static void CreateTextMeshProObjectPerform(MenuCommand command) + { + GameObject go = ObjectFactory.CreateGameObject("Text (TMP)"); + + // Add support for new prefab mode + StageUtility.PlaceGameObjectInCurrentStage(go); + + TextMeshPro textComponent = ObjectFactory.AddComponent(go); + + if (textComponent.m_isWaitingOnResourceLoad == false) + { + // Get reference to potential Presets for component + #if UNITY_2019_3_OR_NEWER + Preset[] presets = Preset.GetDefaultPresetsForObject(textComponent); + + if (presets == null || presets.Length == 0) + { + textComponent.text = "Sample text"; + textComponent.alignment = TextAlignmentOptions.TopLeft; + } + else + { + textComponent.renderer.sortingLayerID = textComponent._SortingLayerID; + textComponent.renderer.sortingOrder = textComponent._SortingOrder; + } + #else + if (Preset.GetDefaultForObject(textComponent) == null) + { + textComponent.text = "Sample text"; + textComponent.alignment = TextAlignmentOptions.TopLeft; + } + else + { + textComponent.renderer.sortingLayerID = textComponent._SortingLayerID; + textComponent.renderer.sortingOrder = textComponent._SortingOrder; + } + #endif + + if (TMP_Settings.autoSizeTextContainer) + { + Vector2 size = textComponent.GetPreferredValues(TMP_Math.FLOAT_MAX, TMP_Math.FLOAT_MAX); + textComponent.rectTransform.sizeDelta = size; + } + else + { + textComponent.rectTransform.sizeDelta = TMP_Settings.defaultTextMeshProTextContainerSize; + } + } + else + { + textComponent.text = "Sample text"; + textComponent.alignment = TextAlignmentOptions.TopLeft; + } + + Undo.RegisterCreatedObjectUndo(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; + } + + + /// + /// Create a TextMeshPro object that works with the CanvasRenderer + /// + /// + [MenuItem("GameObject/UI/Text - TextMeshPro", false, 2001)] + static void CreateTextMeshProGuiObjectPerform(MenuCommand menuCommand) + { + GameObject go = TMP_DefaultControls.CreateText(GetStandardResources()); + + // Override text color and font size + TextMeshProUGUI textComponent = go.GetComponent(); + + if (textComponent.m_isWaitingOnResourceLoad == false) + { + // Get reference to potential Presets for component + #if UNITY_2019_3_OR_NEWER + Preset[] presets = Preset.GetDefaultPresetsForObject(textComponent); + + if (presets == null || presets.Length == 0) + { + textComponent.fontSize = TMP_Settings.defaultFontSize; + textComponent.color = Color.white; + textComponent.text = "New Text"; + } + #else + if (Preset.GetDefaultForObject(textComponent) == null) + { + textComponent.fontSize = TMP_Settings.defaultFontSize; + textComponent.color = Color.white; + textComponent.text = "New Text"; + } + #endif + + if (TMP_Settings.autoSizeTextContainer) + { + Vector2 size = textComponent.GetPreferredValues(TMP_Math.FLOAT_MAX, TMP_Math.FLOAT_MAX); + textComponent.rectTransform.sizeDelta = size; + } + else + { + textComponent.rectTransform.sizeDelta = TMP_Settings.defaultTextMeshProUITextContainerSize; + } + } + else + { + textComponent.fontSize = -99; + textComponent.color = Color.white; + textComponent.text = "New Text"; + } + + PlaceUIElementRoot(go, menuCommand); + } + + [MenuItem("GameObject/UI/Button - TextMeshPro", false, 2031)] + public static void AddButton(MenuCommand menuCommand) + { + GameObject go = TMP_DefaultControls.CreateButton(GetStandardResources()); + + // Override font size + TMP_Text textComponent = go.GetComponentInChildren(); + 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)] + public static 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"; + + private static TMP_DefaultControls.Resources s_StandardResources; + + + private static TMP_DefaultControls.Resources GetStandardResources() + { + if (s_StandardResources.standard == null) + { + s_StandardResources.standard = AssetDatabase.GetBuiltinExtraResource(kStandardSpritePath); + s_StandardResources.background = AssetDatabase.GetBuiltinExtraResource(kBackgroundSpritePath); + s_StandardResources.inputField = AssetDatabase.GetBuiltinExtraResource(kInputFieldBackgroundPath); + s_StandardResources.knob = AssetDatabase.GetBuiltinExtraResource(kKnobPath); + s_StandardResources.checkmark = AssetDatabase.GetBuiltinExtraResource(kCheckmarkPath); + s_StandardResources.dropdown = AssetDatabase.GetBuiltinExtraResource(kDropdownArrowPath); + s_StandardResources.mask = AssetDatabase.GetBuiltinExtraResource(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.GetComponentsInParent(true).Length == 0) + { + // Create canvas under context GameObject, + // and make that be the parent which UI element is added under. + GameObject canvas = CreateNewUI(); + Undo.SetTransformParent(canvas.transform, parent.transform, ""); + parent = canvas; + } + + GameObjectUtility.EnsureUniqueNameForSibling(element); + + SetParentAndAlign(element, parent); + if (!explicitParentChoice) // not a context click, so center in sceneview + SetPositionVisibleinSceneView(parent.GetComponent(), element.GetComponent()); + + // This call ensure any change made to created Objects after they where registered will be part of the Undo. + Undo.RegisterFullObjectHierarchyUndo(parent == null ? element : parent, ""); + + // 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); + + Selection.activeGameObject = element; + } + + private static void SetParentAndAlign(GameObject child, GameObject parent) + { + if (parent == null) + return; + + Undo.SetTransformParent(child.transform, parent.transform, ""); + + RectTransform rectTransform = child.transform as RectTransform; + if (rectTransform) + { + rectTransform.anchoredPosition = Vector2.zero; + Vector3 localPosition = rectTransform.localPosition; + localPosition.z = 0; + rectTransform.localPosition = localPosition; + } + else + { + child.transform.localPosition = Vector3.zero; + } + child.transform.localRotation = Quaternion.identity; + child.transform.localScale = Vector3.one; + + 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); + } + + + public static GameObject CreateNewUI() + { + // Root for the UI + var root = new GameObject("Canvas"); + root.layer = LayerMask.NameToLayer(kUILayerName); + Canvas canvas = root.AddComponent(); + canvas.renderMode = RenderMode.ScreenSpaceOverlay; + root.AddComponent(); + root.AddComponent(); + + // 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(); + if (esys == null) + { + var eventSystem = new GameObject("EventSystem"); + GameObjectUtility.SetParentAndAlign(eventSystem, parent); + esys = eventSystem.AddComponent(); + eventSystem.AddComponent(); + + 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. + public static 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() : 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(); + 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/Assets/TextMesh Pro/Scripts/Editor/TMPro_CreateObjectMenu.cs.meta b/Assets/TextMesh Pro/Scripts/Editor/TMPro_CreateObjectMenu.cs.meta new file mode 100644 index 0000000..9ede87c --- /dev/null +++ b/Assets/TextMesh Pro/Scripts/Editor/TMPro_CreateObjectMenu.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: ee91e53d72bfe904fa18e41b4c9b7b48 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TextMesh Pro/Scripts/Editor/TMPro_EditorShaderUtilities.cs b/Assets/TextMesh Pro/Scripts/Editor/TMPro_EditorShaderUtilities.cs new file mode 100644 index 0000000..d9e6940 --- /dev/null +++ b/Assets/TextMesh Pro/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 + { + + /// + /// Copy Shader properties from source to destination material. + /// + /// + /// + 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; + } + } + } + + } + + } + +} diff --git a/Assets/TextMesh Pro/Scripts/Editor/TMPro_EditorShaderUtilities.cs.meta b/Assets/TextMesh Pro/Scripts/Editor/TMPro_EditorShaderUtilities.cs.meta new file mode 100644 index 0000000..9ffb67f --- /dev/null +++ b/Assets/TextMesh Pro/Scripts/Editor/TMPro_EditorShaderUtilities.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: e3abcac8c3ce6824bba7be6946886473 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TextMesh Pro/Scripts/Editor/TMPro_FontAssetCreatorWindow.cs b/Assets/TextMesh Pro/Scripts/Editor/TMPro_FontAssetCreatorWindow.cs new file mode 100644 index 0000000..c3362f2 --- /dev/null +++ b/Assets/TextMesh Pro/Scripts/Editor/TMPro_FontAssetCreatorWindow.cs @@ -0,0 +1,42 @@ +using UnityEngine; +using UnityEngine.TextCore.Text; +using UnityEditor; +using UnityEditor.TextCore.Text; + + +namespace TMPro.EditorUtilities +{ + public class TMPro_FontAssetCreatorWindow : EditorWindow + { + private static FontAssetCreatorWindow m_Window; + + [MenuItem("Window/TextMeshPro/Font Asset Creator", false, 2025)] + public static void ShowFontAtlasCreatorWindow() + { + m_Window = GetWindow(); + m_Window.titleContent = new GUIContent("Font Asset Creator"); + m_Window.Focus(); + + // Make sure TMP Essential Resources have been imported. + CheckEssentialResources(); + } + + // Make sure TMP Essential Resources have been imported. + static void CheckEssentialResources() + { + if (TMP_Settings.instance == null) + { + m_Window.Close(); + TextEventManager.RESOURCE_LOAD_EVENT.Add(ON_RESOURCES_LOADED); + } + } + + // Event received when TMP resources have been loaded. + static void ON_RESOURCES_LOADED() + { + TextEventManager.RESOURCE_LOAD_EVENT.Remove(ON_RESOURCES_LOADED); + + ShowFontAtlasCreatorWindow(); + } + } +} diff --git a/Assets/TextMesh Pro/Scripts/Editor/TMPro_FontAssetCreatorWindow.cs.meta b/Assets/TextMesh Pro/Scripts/Editor/TMPro_FontAssetCreatorWindow.cs.meta new file mode 100644 index 0000000..bd6fd92 --- /dev/null +++ b/Assets/TextMesh Pro/Scripts/Editor/TMPro_FontAssetCreatorWindow.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: a7494d6bf1b80c54284138eeb758680f +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TextMesh Pro/Scripts/Editor/TMPro_SortingLayerHelper.cs b/Assets/TextMesh Pro/Scripts/Editor/TMPro_SortingLayerHelper.cs new file mode 100644 index 0000000..4e7b051 --- /dev/null +++ b/Assets/TextMesh Pro/Scripts/Editor/TMPro_SortingLayerHelper.cs @@ -0,0 +1,58 @@ +using UnityEngine; + + +namespace TMPro +{ + // Helpers used by the different sorting layer classes. + public static class SortingLayerHelper + { + // Gets an array of sorting layer names. + public static string[] sortingLayerNames + { + get + { + return GetSortingLayerNames(); + } + } + + static string[] GetSortingLayerNames() + { + int layerCount = SortingLayer.layers.Length; + + string[] layerNames = new string[layerCount]; + + for (int i = 0; i < layerCount; i++) + { + layerNames[i] = SortingLayer.layers[i].name; + } + + return layerNames; + } + + internal static int GetSortingLayerIndexFromValue(int value) + { + int layerCount = SortingLayer.layers.Length; + + for (int i = 0; i < layerCount; i++) + { + if (value == SortingLayer.layers[i].value) + return i; + } + + return -1; + } + + internal static int GetSortingLayerIndexFromSortingLayerID(int id) + { + int layerCount = SortingLayer.layers.Length; + + for (int i = 0; i < layerCount; i++) + { + if (id == SortingLayer.layers[i].id) + return i; + } + + return -1; + } + } +} diff --git a/Assets/TextMesh Pro/Scripts/Editor/TMPro_SortingLayerHelper.cs.meta b/Assets/TextMesh Pro/Scripts/Editor/TMPro_SortingLayerHelper.cs.meta new file mode 100644 index 0000000..9320477 --- /dev/null +++ b/Assets/TextMesh Pro/Scripts/Editor/TMPro_SortingLayerHelper.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 2a3ed090f0f024e4c9b683faab2b03b1 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TextMesh Pro/Scripts/Editor/TextCore.Deprecated.cs b/Assets/TextMesh Pro/Scripts/Editor/TextCore.Deprecated.cs new file mode 100644 index 0000000..29295cd --- /dev/null +++ b/Assets/TextMesh Pro/Scripts/Editor/TextCore.Deprecated.cs @@ -0,0 +1,52 @@ +using System; + +namespace TMPro +{ + [Obsolete("AtlasPopulationMode has been deprecated. Use AtlasPopulationMode instead (UnityUpgradable) -> [UnityEngine.TextCoreTextEngineModule] UnityEngine.TextCore.Text.AtlasPopulationMode", true)] + [UnityEngine.Internal.ExcludeFromDocs] + public enum AtlasPopulationMode + { + // Original TMP_ShaderUtilities class. + } + + /*[Obsolete("ShaderUtilities has been deprecated. Use TextShaderUtilities instead (UnityUpgradable) -> UnityEngine.TextCore.Text.TextShaderUtilities", true)] + public class ShaderUtilities + { + // Original TMP_ShaderUtilities class. + }*/ + + [Obsolete("TMP_FontAsset has been deprecated. Use FontAsset instead (UnityUpgradable) -> [UnityEngine.TextCoreTextEngineModule] UnityEngine.TextCore.Text.FontAsset", true)] + [UnityEngine.Internal.ExcludeFromDocs] + public class TMP_FontAsset + { + // Original TMP_FontAsset class. + } + + [Obsolete("TMP_SpriteAsset has been deprecated. Use SpriteAsset instead (UnityUpgradable) -> [UnityEngine.TextCoreTextEngineModule] UnityEngine.TextCore.Text.SpriteAsset", true)] + [UnityEngine.Internal.ExcludeFromDocs] + public class TMP_SpriteAsset + { + // Original TMP_SpriteAsset class. + } + + [Obsolete("TMP_StyleSheet has been deprecated. Use TextStyleSheet instead (UnityUpgradable) -> [UnityEngine.TextCoreTextEngineModule] UnityEngine.TextCore.Text.TextStyleSheet", true)] + [UnityEngine.Internal.ExcludeFromDocs] + public class TMP_StyleSheet + { + // Original TMP_StyleSheet class. + } + + [Obsolete("TMP_ColorGradient has been deprecated. Use TextColorGradient instead (UnityUpgradable) -> [UnityEngine.TextCoreTextEngineModule] UnityEngine.TextCore.Text.TextColorGradient", true)] + [UnityEngine.Internal.ExcludeFromDocs] + public class TMP_ColorGradient + { + // Original TMP_ColorGradient class. + } + + [Obsolete("TMPro_EventManager has been deprecated. Use TextEventManager instead (UnityUpgradable) -> [UnityEngine.TextCoreTextEngineModule] UnityEngine.TextCore.Text.TextEventManager", true)] + [UnityEngine.Internal.ExcludeFromDocs] + public static class TMPro_EventManager + { + // Original TMPro_EventManager class. + } +} diff --git a/Assets/TextMesh Pro/Scripts/Editor/TextCore.Deprecated.cs.meta b/Assets/TextMesh Pro/Scripts/Editor/TextCore.Deprecated.cs.meta new file mode 100644 index 0000000..06fbf21 --- /dev/null +++ b/Assets/TextMesh Pro/Scripts/Editor/TextCore.Deprecated.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bde53ab20f68be04b816a9e44ae1bba2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TextMesh Pro/Scripts/Editor/Unity.TextMeshPro.Editor.asmdef b/Assets/TextMesh Pro/Scripts/Editor/Unity.TextMeshPro.Editor.asmdef new file mode 100644 index 0000000..04a7bf9 --- /dev/null +++ b/Assets/TextMesh Pro/Scripts/Editor/Unity.TextMeshPro.Editor.asmdef @@ -0,0 +1,37 @@ +{ + "name": "Unity.TextMeshPro.Editor", + "rootNamespace": "", + "references": [ + "Unity.TextMeshPro", + "Unity.RenderPipelines.HighDefinition.Editor", + "Unity.RenderPipelines.Core.Runtime", + "Unity.RenderPipelines.HighDefinition.Runtime" + ], + "includePlatforms": [ + "Editor" + ], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [ + { + "name": "com.unity.render-pipelines.high-definition", + "expression": "10.7.0", + "define": "HDRP_10_7_OR_NEWER" + }, + { + "name": "com.unity.render-pipelines.high-definition", + "expression": "11.0.0", + "define": "HDRP_11_OR_NEWER" + }, + { + "name": "com.unity.render-pipelines.high-definition", + "expression": "12.0.0", + "define": "HDRP_12_OR_NEWER" + } + ], + "noEngineReferences": false +} \ No newline at end of file diff --git a/Assets/TextMesh Pro/Scripts/Editor/Unity.TextMeshPro.Editor.asmdef.meta b/Assets/TextMesh Pro/Scripts/Editor/Unity.TextMeshPro.Editor.asmdef.meta new file mode 100644 index 0000000..5aaf576 --- /dev/null +++ b/Assets/TextMesh Pro/Scripts/Editor/Unity.TextMeshPro.Editor.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 43c7445480589fb4a944cdc658afd52e +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TextMesh Pro/Scripts/Runtime.meta b/Assets/TextMesh Pro/Scripts/Runtime.meta new file mode 100644 index 0000000..f50c073 --- /dev/null +++ b/Assets/TextMesh Pro/Scripts/Runtime.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0e4b83ad61a6f8d47903753b697fd514 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TextMesh Pro/Scripts/Runtime/AssemblyInfo.cs b/Assets/TextMesh Pro/Scripts/Runtime/AssemblyInfo.cs new file mode 100644 index 0000000..2400e74 --- /dev/null +++ b/Assets/TextMesh Pro/Scripts/Runtime/AssemblyInfo.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/Assets/TextMesh Pro/Scripts/Runtime/AssemblyInfo.cs.meta b/Assets/TextMesh Pro/Scripts/Runtime/AssemblyInfo.cs.meta new file mode 100644 index 0000000..968257b --- /dev/null +++ b/Assets/TextMesh Pro/Scripts/Runtime/AssemblyInfo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: cc4155a9f4c4a61478dced5053f1bd07 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TextMesh Pro/Scripts/Runtime/GlobalSuppressions.cs b/Assets/TextMesh Pro/Scripts/Runtime/GlobalSuppressions.cs new file mode 100644 index 0000000..eea7d5e --- /dev/null +++ b/Assets/TextMesh Pro/Scripts/Runtime/GlobalSuppressions.cs @@ -0,0 +1,31 @@ +// This file is used by Code Analysis to maintain SuppressMessage +// attributes that are applied to this project. +// Project-level suppressions either have no target or are given +// a specific target and scoped to a namespace, type, member, etc. + +using System.Diagnostics.CodeAnalysis; + +[assembly: SuppressMessage("Performance", "UNT0026")] +[assembly: SuppressMessage("Performance", "UNT0035")] +[assembly: SuppressMessage("Style", "IDE0017")] +[assembly: SuppressMessage("Style", "IDE0018")] +[assembly: SuppressMessage("Style", "IDE0031")] +[assembly: SuppressMessage("Style", "IDE0034")] +[assembly: SuppressMessage("Style", "IDE0044")] +[assembly: SuppressMessage("Style", "IDE0051")] +[assembly: SuppressMessage("Style", "IDE0052")] +[assembly: SuppressMessage("Style", "IDE0054")] +[assembly: SuppressMessage("Style", "IDE0056")] +[assembly: SuppressMessage("Style", "IDE0057")] +[assembly: SuppressMessage("Style", "IDE0059")] +[assembly: SuppressMessage("Style", "IDE0060")] +[assembly: SuppressMessage("Style", "IDE0063")] +[assembly: SuppressMessage("Style", "IDE0066")] +[assembly: SuppressMessage("Style", "IDE0074")] +[assembly: SuppressMessage("Style", "IDE0079")] +[assembly: SuppressMessage("Style", "IDE0083")] +[assembly: SuppressMessage("Style", "IDE0090")] +[assembly: SuppressMessage("Style", "IDE0180")] +[assembly: SuppressMessage("Style", "IDE0251")] +[assembly: SuppressMessage("Style", "IDE1005")] +[assembly: SuppressMessage("Style", "IDE1006")] diff --git a/Assets/TextMesh Pro/Scripts/Runtime/GlobalSuppressions.cs.meta b/Assets/TextMesh Pro/Scripts/Runtime/GlobalSuppressions.cs.meta new file mode 100644 index 0000000..ca9c241 --- /dev/null +++ b/Assets/TextMesh Pro/Scripts/Runtime/GlobalSuppressions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b51b4f4c3bc4c0844b9eb517250fe406 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TextMesh Pro/Scripts/Runtime/ITextPreProcessor.cs b/Assets/TextMesh Pro/Scripts/Runtime/ITextPreProcessor.cs new file mode 100644 index 0000000..12603bf --- /dev/null +++ b/Assets/TextMesh Pro/Scripts/Runtime/ITextPreProcessor.cs @@ -0,0 +1,17 @@ + + +namespace TMPro +{ + /// + /// Interface used for preprocessing and shaping of text. + /// + public interface ITextPreprocessor + { + /// + /// Function used for preprocessing of text + /// + /// Source text to be processed + /// Processed text + string PreprocessText(string text); + } +} diff --git a/Assets/TextMesh Pro/Scripts/Runtime/ITextPreProcessor.cs.meta b/Assets/TextMesh Pro/Scripts/Runtime/ITextPreProcessor.cs.meta new file mode 100644 index 0000000..9b53875 --- /dev/null +++ b/Assets/TextMesh Pro/Scripts/Runtime/ITextPreProcessor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 04973cf92f7eb984989cc757a35ce78c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TextMesh Pro/Scripts/Runtime/MaterialReferenceManager.cs b/Assets/TextMesh Pro/Scripts/Runtime/MaterialReferenceManager.cs new file mode 100644 index 0000000..bac1e7a --- /dev/null +++ b/Assets/TextMesh Pro/Scripts/Runtime/MaterialReferenceManager.cs @@ -0,0 +1,623 @@ +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.TextCore.Text; + + +namespace TMPro +{ + + public class MaterialReferenceManager + { + private static MaterialReferenceManager s_Instance; + + // Dictionaries used to track Asset references. + private Dictionary m_FontMaterialReferenceLookup = new Dictionary(); + private Dictionary m_FontAssetReferenceLookup = new Dictionary(); + private Dictionary m_SpriteAssetReferenceLookup = new Dictionary(); + private Dictionary m_ColorGradientReferenceLookup = new Dictionary(); + + + /// + /// Get a singleton instance of the registry + /// + public static MaterialReferenceManager instance + { + get + { + if (MaterialReferenceManager.s_Instance == null) + MaterialReferenceManager.s_Instance = new MaterialReferenceManager(); + return MaterialReferenceManager.s_Instance; + } + } + + + + /// + /// Add new font asset reference to dictionary. + /// + /// + public static void AddFontAsset(FontAsset fontAsset) + { + MaterialReferenceManager.instance.AddFontAssetInternal(fontAsset); + } + + /// + /// Add new Font Asset reference to dictionary. + /// + /// + private void AddFontAssetInternal(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); + } + + + + /// + /// Add new Sprite Asset to dictionary. + /// + /// + /// + public static void AddSpriteAsset(SpriteAsset spriteAsset) + { + MaterialReferenceManager.instance.AddSpriteAssetInternal(spriteAsset); + } + + /// + /// Internal method to add a new sprite asset to the dictionary. + /// + /// + /// + private void AddSpriteAssetInternal(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); + } + + /// + /// Add new Sprite Asset to dictionary. + /// + /// + /// + public static void AddSpriteAsset(int hashCode, SpriteAsset spriteAsset) + { + MaterialReferenceManager.instance.AddSpriteAssetInternal(hashCode, spriteAsset); + } + + /// + /// Internal method to add a new sprite asset to the dictionary. + /// + /// + /// + private void AddSpriteAssetInternal(int hashCode, 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; + } + + + /// + /// Add new Material reference to dictionary. + /// + /// + /// + public static void AddFontMaterial(int hashCode, Material material) + { + MaterialReferenceManager.instance.AddFontMaterialInternal(hashCode, material); + } + + /// + /// Add new material reference to dictionary. + /// + /// + /// + 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); + } + + + /// + /// Add new Color Gradient Preset to dictionary. + /// + /// + /// + public static void AddColorGradientPreset(int hashCode, TextColorGradient spriteAsset) + { + MaterialReferenceManager.instance.AddColorGradientPreset_Internal(hashCode, spriteAsset); + } + + /// + /// Internal method to add a new Color Gradient Preset to the dictionary. + /// + /// + /// + private void AddColorGradientPreset_Internal(int hashCode, TextColorGradient spriteAsset) + { + if (m_ColorGradientReferenceLookup.ContainsKey(hashCode)) return; + + // Add reference to Color Gradient Preset Asset. + m_ColorGradientReferenceLookup.Add(hashCode, spriteAsset); + } + + + + /// + /// Add new material reference and return the index of this new reference in the materialReferences array. + /// + /// + /// + /// + //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]; + // } + //} + + + /// + /// Add new material reference and return the index of this new reference in the materialReferences array. + /// + /// + /// + /// + /// + //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]; + // } + //} + + + /// + /// Function to check if the font asset is already referenced. + /// + /// + /// + public bool Contains(FontAsset font) + { + return m_FontAssetReferenceLookup.ContainsKey(font.hashCode); + } + + + /// + /// Function to check if the sprite asset is already referenced. + /// + /// + /// + public bool Contains(SpriteAsset sprite) + { + return m_FontAssetReferenceLookup.ContainsKey(sprite.hashCode); + } + + + + /// + /// Function returning the Font Asset corresponding to the provided hash code. + /// + /// + /// + /// + public static bool TryGetFontAsset(int hashCode, out FontAsset fontAsset) + { + return MaterialReferenceManager.instance.TryGetFontAssetInternal(hashCode, out fontAsset); + } + + /// + /// Internal Function returning the Font Asset corresponding to the provided hash code. + /// + /// + /// + /// + private bool TryGetFontAssetInternal(int hashCode, out FontAsset fontAsset) + { + fontAsset = null; + + return m_FontAssetReferenceLookup.TryGetValue(hashCode, out fontAsset); + } + + + + /// + /// Function returning the Sprite Asset corresponding to the provided hash code. + /// + /// + /// + /// + public static bool TryGetSpriteAsset(int hashCode, out SpriteAsset spriteAsset) + { + return MaterialReferenceManager.instance.TryGetSpriteAssetInternal(hashCode, out spriteAsset); + } + + /// + /// Internal function returning the Sprite Asset corresponding to the provided hash code. + /// + /// + /// + /// + private bool TryGetSpriteAssetInternal(int hashCode, out SpriteAsset spriteAsset) + { + spriteAsset = null; + + return m_SpriteAssetReferenceLookup.TryGetValue(hashCode, out spriteAsset); + } + + + /// + /// Function returning the Color Gradient Preset corresponding to the provided hash code. + /// + /// + /// + /// + public static bool TryGetColorGradientPreset(int hashCode, out TextColorGradient gradientPreset) + { + return MaterialReferenceManager.instance.TryGetColorGradientPresetInternal(hashCode, out gradientPreset); + } + + /// + /// Internal function returning the Color Gradient Preset corresponding to the provided hash code. + /// + /// + /// + /// + private bool TryGetColorGradientPresetInternal(int hashCode, out TextColorGradient gradientPreset) + { + gradientPreset = null; + + return m_ColorGradientReferenceLookup.TryGetValue(hashCode, out gradientPreset); + } + + + /// + /// Function returning the Font Material corresponding to the provided hash code. + /// + /// + /// + /// + public static bool TryGetMaterial(int hashCode, out Material material) + { + return MaterialReferenceManager.instance.TryGetMaterialInternal(hashCode, out material); + } + + /// + /// Internal function returning the Font Material corresponding to the provided hash code. + /// + /// + /// + /// + private bool TryGetMaterialInternal(int hashCode, out Material material) + { + material = null; + + return m_FontMaterialReferenceLookup.TryGetValue(hashCode, out material); + } + + + /// + /// Function to lookup a material based on hash code and returning the MaterialReference containing this material. + /// + /// + /// + /// + //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; + //} + + + + /// + /// + /// + /// + /// + //public int GetMaterialIndex(TMP_FontAsset fontAsset) + //{ + // if (m_MaterialReferenceLookup.ContainsKey(fontAsset.materialHashCode)) + // return m_MaterialReferenceLookup[fontAsset.materialHashCode]; + + // return -1; + //} + + + /// + /// + /// + /// + /// + //public TMP_FontAsset GetFontAsset(int index) + //{ + // if (index >= 0 && index < materialReferences.Length) + // return materialReferences[index].fontAsset; + + // return null; + //} + + + /// + /// + /// + /// + /// + /// + //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; + //} + + + + /// + /// + /// + //public void Clear() + //{ + // //m_currentIndex = 0; + // m_MaterialReferenceLookup.Clear(); + // m_SpriteAssetReferenceLookup.Clear(); + // m_FontAssetReferenceLookup.Clear(); + //} + + + /// + /// Function to clear the reference count for each of the material references. + /// + //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 TMP_MaterialReference + { + public Material material; + public int referenceCount; + } + + + public struct MaterialReference + { + + public int index; + public FontAsset fontAsset; + public SpriteAsset spriteAsset; + public Material material; + public bool isDefaultMaterial; + public bool isFallbackMaterial; + public Material fallbackMaterial; + public float padding; + public int referenceCount; + + + /// + /// Constructor for new Material Reference. + /// + /// + /// + /// + /// + /// + public MaterialReference(int index, FontAsset fontAsset, 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(); + this.isFallbackMaterial = false; + this.fallbackMaterial = null; + this.padding = padding; + this.referenceCount = 0; + } + + + /// + /// Function to check if a certain font asset is contained in the material reference array. + /// + /// + /// + /// + public static bool Contains(MaterialReference[] materialReferences, 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; + } + + + /// + /// Function to add a new material reference and returning its index in the material reference array. + /// + /// + /// + /// + /// + /// + public static int AddMaterialReference(Material material, FontAsset fontAsset, ref MaterialReference[] materialReferences, Dictionary materialReferenceIndexLookup) + { + int materialID = material.GetInstanceID(); + int index; + + if (materialReferenceIndexLookup.TryGetValue(materialID, out index)) + return index; + + index = materialReferenceIndexLookup.Count; + + // Add new reference index + materialReferenceIndexLookup[materialID] = index; + + if (index >= materialReferences.Length) + System.Array.Resize(ref materialReferences, Mathf.NextPowerOfTwo(index + 1)); + + materialReferences[index].index = index; + materialReferences[index].fontAsset = fontAsset; + materialReferences[index].spriteAsset = null; + materialReferences[index].material = material; + materialReferences[index].isDefaultMaterial = materialID == fontAsset.material.GetInstanceID(); + materialReferences[index].referenceCount = 0; + + return index; + } + + + /// + /// + /// + /// + /// + /// + /// + /// + public static int AddMaterialReference(Material material, SpriteAsset spriteAsset, ref MaterialReference[] materialReferences, Dictionary materialReferenceIndexLookup) + { + int materialID = material.GetInstanceID(); + int index; + + if (materialReferenceIndexLookup.TryGetValue(materialID, out index)) + return index; + + index = materialReferenceIndexLookup.Count; + + // Add new reference index + materialReferenceIndexLookup[materialID] = index; + + if (index >= materialReferences.Length) + System.Array.Resize(ref materialReferences, Mathf.NextPowerOfTwo(index + 1)); + + materialReferences[index].index = index; + materialReferences[index].fontAsset = materialReferences[0].fontAsset; + materialReferences[index].spriteAsset = spriteAsset; + materialReferences[index].material = material; + materialReferences[index].isDefaultMaterial = true; + materialReferences[index].referenceCount = 0; + + return index; + } + } +} diff --git a/Assets/TextMesh Pro/Scripts/Runtime/MaterialReferenceManager.cs.meta b/Assets/TextMesh Pro/Scripts/Runtime/MaterialReferenceManager.cs.meta new file mode 100644 index 0000000..785ffcc --- /dev/null +++ b/Assets/TextMesh Pro/Scripts/Runtime/MaterialReferenceManager.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 3fd0378c8b128984483147606e14726e +timeCreated: 1449743129 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TextMesh Pro/Scripts/Runtime/TMP_CharacterInfo.cs b/Assets/TextMesh Pro/Scripts/Runtime/TMP_CharacterInfo.cs new file mode 100644 index 0000000..9525bc6 --- /dev/null +++ b/Assets/TextMesh Pro/Scripts/Runtime/TMP_CharacterInfo.cs @@ -0,0 +1,220 @@ +using System.Diagnostics; +using UnityEngine; +using UnityEngine.TextCore; +using UnityEngine.TextCore.Text; + + +namespace TMPro +{ + public struct TMP_Vertex + { + public Vector3 position; + public Vector4 uv; + public Vector2 uv2; + //public Vector2 uv4; + public Color32 color; + + public static TMP_Vertex zero { get { return k_Zero; } } + + //public Vector3 normal; + //public Vector4 tangent; + + static readonly TMP_Vertex k_Zero = new TMP_Vertex(); + } + + /// + /// + /// + public struct TMP_Offset + { + public float left { get { return m_Left; } set { m_Left = value; } } + + public float right { get { return m_Right; } set { m_Right = value; } } + + public float top { get { return m_Top; } set { m_Top = value; } } + + public float bottom { get { return m_Bottom; } set { m_Bottom = value; } } + + public float horizontal { get { return m_Left; } set { m_Left = value; m_Right = value; } } + + public float vertical { get { return m_Top; } set { m_Top = value; m_Bottom = value; } } + + /// + /// + /// + public static TMP_Offset zero { get { return k_ZeroOffset; } } + + // ============================================= + // Private backing fields for public properties. + // ============================================= + + float m_Left; + float m_Right; + float m_Top; + float m_Bottom; + + static readonly TMP_Offset k_ZeroOffset = new TMP_Offset(0F, 0F, 0F, 0F); + + /// + /// + /// + /// + /// + /// + /// + public TMP_Offset(float left, float right, float top, float bottom) + { + m_Left = left; + m_Right = right; + m_Top = top; + m_Bottom = bottom; + } + + /// + /// + /// + /// + /// + public TMP_Offset(float horizontal, float vertical) + { + m_Left = horizontal; + m_Right = horizontal; + m_Top = vertical; + m_Bottom = vertical; + } + + public static bool operator ==(TMP_Offset lhs, TMP_Offset rhs) + { + return lhs.m_Left == rhs.m_Left && + lhs.m_Right == rhs.m_Right && + lhs.m_Top == rhs.m_Top && + lhs.m_Bottom == rhs.m_Bottom; + } + + public static bool operator !=(TMP_Offset lhs, TMP_Offset rhs) + { + return !(lhs == rhs); + } + + public static TMP_Offset operator *(TMP_Offset a, float b) + { + return new TMP_Offset(a.m_Left * b, a.m_Right * b, a.m_Top * b, a.m_Bottom * b); + } + + public override int GetHashCode() + { + return base.GetHashCode(); + } + + public override bool Equals(object obj) + { + return base.Equals(obj); + } + + public bool Equals(TMP_Offset other) + { + return base.Equals(other); + } + } + + + /// + /// + /// + public struct HighlightState + { + public Color32 color; + public TMP_Offset padding; + + public HighlightState(Color32 color, TMP_Offset padding) + { + this.color = color; + this.padding = padding; + } + + public static bool operator ==(HighlightState lhs, HighlightState rhs) + { + return lhs.color.Compare(rhs.color) && lhs.padding == rhs.padding; + } + + public static bool operator !=(HighlightState lhs, HighlightState rhs) + { + return !(lhs == rhs); + } + + public override int GetHashCode() + { + return base.GetHashCode(); + } + + public override bool Equals(object obj) + { + return base.Equals(obj); + } + + public bool Equals(HighlightState other) + { + return base.Equals(other); + } + } + /// + /// Structure containing information about individual text elements (character or sprites). + /// + [DebuggerDisplay("Unicode '{character}' ({((uint)character).ToString(\"X\")})")] + public struct TMP_CharacterInfo + { + public TMP_TextElementType elementType; + + public char character; // Should be changed to an uint to handle UTF32 + public int index; + public int stringLength; + + public TextElement textElement; + public Glyph alternativeGlyph; + public FontAsset fontAsset; + 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 xAdvance; + public float ascender; + public float baseLine; + public float descender; + internal float adjustedAscender; + internal float adjustedDescender; + internal float adjustedHorizontalAdvance; + + public float aspectRatio; + public float scale; + public Color32 color; + public Color32 underlineColor; + public int underlineVertexIndex; + public Color32 strikethroughColor; + public int strikethroughVertexIndex; + public Color32 highlightColor; + public HighlightState highlightState; + public FontStyles style; + public bool isVisible; + //public bool isIgnoringAlignment; + } +} diff --git a/Assets/TextMesh Pro/Scripts/Runtime/TMP_CharacterInfo.cs.meta b/Assets/TextMesh Pro/Scripts/Runtime/TMP_CharacterInfo.cs.meta new file mode 100644 index 0000000..ec5e8e8 --- /dev/null +++ b/Assets/TextMesh Pro/Scripts/Runtime/TMP_CharacterInfo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 78117be65f9ab544a9a373a26f4148f0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TextMesh Pro/Scripts/Runtime/TMP_Compatibility.cs b/Assets/TextMesh Pro/Scripts/Runtime/TMP_Compatibility.cs new file mode 100644 index 0000000..6a12fea --- /dev/null +++ b/Assets/TextMesh Pro/Scripts/Runtime/TMP_Compatibility.cs @@ -0,0 +1,74 @@ +using UnityEngine; +using System.Collections; + + +namespace TMPro +{ + // Class used to convert scenes and objects saved in version 0.1.44 to the new Text Container + public static class TMP_Compatibility + { + public enum AnchorPositions { TopLeft, Top, TopRight, Left, Center, Right, BottomLeft, Bottom, BottomRight, BaseLine, None }; + + /// + /// Function used to convert text alignment option enumeration format. + /// + /// + /// + public static TextAlignmentOptions ConvertTextAlignmentEnumValues(TextAlignmentOptions oldValue) + { + switch ((int)oldValue) + { + case 0: + return TextAlignmentOptions.TopLeft; + case 1: + return TextAlignmentOptions.Top; + case 2: + return TextAlignmentOptions.TopRight; + case 3: + return TextAlignmentOptions.TopJustified; + case 4: + return TextAlignmentOptions.Left; + case 5: + return TextAlignmentOptions.Center; + case 6: + return TextAlignmentOptions.Right; + case 7: + return TextAlignmentOptions.Justified; + case 8: + return TextAlignmentOptions.BottomLeft; + case 9: + return TextAlignmentOptions.Bottom; + case 10: + return TextAlignmentOptions.BottomRight; + case 11: + return TextAlignmentOptions.BottomJustified; + case 12: + return TextAlignmentOptions.BaselineLeft; + case 13: + return TextAlignmentOptions.Baseline; + case 14: + return TextAlignmentOptions.BaselineRight; + case 15: + return TextAlignmentOptions.BaselineJustified; + case 16: + return TextAlignmentOptions.MidlineLeft; + case 17: + return TextAlignmentOptions.Midline; + case 18: + return TextAlignmentOptions.MidlineRight; + case 19: + return TextAlignmentOptions.MidlineJustified; + case 20: + return TextAlignmentOptions.CaplineLeft; + case 21: + return TextAlignmentOptions.Capline; + case 22: + return TextAlignmentOptions.CaplineRight; + case 23: + return TextAlignmentOptions.CaplineJustified; + } + + return TextAlignmentOptions.TopLeft; + } + } +} diff --git a/Assets/TextMesh Pro/Scripts/Runtime/TMP_Compatibility.cs.meta b/Assets/TextMesh Pro/Scripts/Runtime/TMP_Compatibility.cs.meta new file mode 100644 index 0000000..9a8575f --- /dev/null +++ b/Assets/TextMesh Pro/Scripts/Runtime/TMP_Compatibility.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2c9cc00f0e8000543a1ed26c2a0f1f0b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TextMesh Pro/Scripts/Runtime/TMP_CoroutineTween.cs b/Assets/TextMesh Pro/Scripts/Runtime/TMP_CoroutineTween.cs new file mode 100644 index 0000000..13b7e18 --- /dev/null +++ b/Assets/TextMesh Pro/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 { } + + 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 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 { } + + 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 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 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; + } + } + } +} diff --git a/Assets/TextMesh Pro/Scripts/Runtime/TMP_CoroutineTween.cs.meta b/Assets/TextMesh Pro/Scripts/Runtime/TMP_CoroutineTween.cs.meta new file mode 100644 index 0000000..2c4c882 --- /dev/null +++ b/Assets/TextMesh Pro/Scripts/Runtime/TMP_CoroutineTween.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 38133bafd4674d242835faca6f9f864f +timeCreated: 1464850953 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TextMesh Pro/Scripts/Runtime/TMP_DefaultControls.cs b/Assets/TextMesh Pro/Scripts/Runtime/TMP_DefaultControls.cs new file mode 100644 index 0000000..b9f9d73 --- /dev/null +++ b/Assets/TextMesh Pro/Scripts/Runtime/TMP_DefaultControls.cs @@ -0,0 +1,399 @@ +using UnityEngine; +using System.Collections; +using UnityEngine.UI; + +#if UNITY_EDITOR +using UnityEditor; +#endif + + +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_TextElementSize = new Vector2(100f, 100f); + 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.sizeDelta = size; + return child; + } + + static GameObject CreateUIObject(string name, GameObject parent) + { + GameObject go = new GameObject(name); + go.AddComponent(); + 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(); + bgImage.sprite = resources.background; + bgImage.type = Image.Type.Sliced; + bgImage.color = s_DefaultSelectableColor; + + Image handleImage = handle.AddComponent(); + handleImage.sprite = resources.standard; + handleImage.type = Image.Type.Sliced; + handleImage.color = s_DefaultSelectableColor; + + RectTransform sliderAreaRect = sliderArea.GetComponent(); + sliderAreaRect.sizeDelta = new Vector2(-20, -20); + sliderAreaRect.anchorMin = Vector2.zero; + sliderAreaRect.anchorMax = Vector2.one; + + RectTransform handleRect = handle.GetComponent(); + handleRect.sizeDelta = new Vector2(20, 20); + + Scrollbar scrollbar = scrollbarRoot.AddComponent(); + 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(); + SetParentAndAlign(childText, buttonRoot); + + Image image = buttonRoot.AddComponent(); + image.sprite = resources.standard; + image.type = Image.Type.Sliced; + image.color = s_DefaultSelectableColor; + + Button bt = buttonRoot.AddComponent